使用以下代码:
<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上发现的东西,但没有效果。有什么想法吗?
答案 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)
我采取了另一种方式:隔离孩子,用随机文本替换它的位置,像往常一样执行替换,然后再用我们的子代码替换该随机字符串。
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;