使用jquery从函数中排除子元素

时间:2017-02-16 14:07:49

标签: javascript jquery regex

使用以下代码:

<p>Red red red red <a href="http://www.google.com"> this should be red alone</a> red red</p>

我如何将所有“红色”改为“黄色”除了&#39; a&#39;标记

我到目前为止:

$("p").html(function(i,event){
    return event.replace(/(red)/g,'yellow');
});

...将所有内容更改为黄色。我假设我需要添加一个if子句来说明以下内容:

if (event.target.tagName === "a")
{return false}

但是我已经尝试了很多我在stackoverflow上发现的东西,但没有效果。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

您可以使用contents()迭代文本节点。这对使用html()

的方式对内部元素上的任何事件侦听器没有任何影响

$('p').contents().each(function() {
  if (this.nodeType === 3) {
    this.textContent = this.textContent.replace(/red/gi, function(match) {
      return match === 'Red' ? 'Yellow' : 'yellow'
    });
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Red red red red <a href="http://www.google.com">red</a> red red</p>

答案 1 :(得分:1)

肮脏的方式,因为过于具体,如果<a><p><p>,则不起作用,但如果在<a>中只有一个var aContent = $('p > a')[0].outerHTML; $('p').html(function(i,event) { var parts = event.split(aContent); for (var i, l = parts.length; i<l; i++) { parts[i] = parts[i].replace(/red/ig, 'yellow'); } return parts.join(aContent); });则有效。

最好的方法是找出正确的正则表达式。

<p>Red red red red <a href="http://www.google.com">red</a> red red</p>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
print(len(row_list))

答案 2 :(得分:0)

我采取了另一种方式:隔离孩子,用随机文本替换它的位置,像往常一样执行替换,然后再用我们的子代码替换该随机字符串。

&#13;
&#13;
var para = $("p");
var child = para.children()[0];
var text = child.outerHTML;

para.find(child).replaceWith("zzzz");

$(para).html(function(i,event){
    return event.replace(/(red)/gi,'yellow');
});

$(para).html(function(i,event){
   return event.replace("zzzz", text );
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<p>Red red red red <a href="http://www.google.com"> this should be red alone</a> red red</p>
&#13;
&#13;
&#13;