jQuery 不要 select 在 p 标签中添加 a 标签
jQuery don't select a-tag in p-tag
您好,我尝试将 p-tag 中的数字设置为不同的样式,并防止在 a-tag 中设置样式。 jQuery 将名为 number 的 span-tag 添加到 p-tag,但不应将其添加到 a-tag 的 href 中。
<div class="ce_text">
<p>1234 example <a class="link" href="http://www.abc.de/123/def" target="_blank">www.abc.de/123/def</a> goes on 567.</p>
<a href="http://www.999.com">Link 999 (no function)</a>
<p>1234 example <a class="link" href="http://www.abc.de/123/def" target="_blank">www.abc.de/123/def</a> goes on 567.</p>
</div>
p-tag中的数字应该包含span-tag,a-tag不应该:
RIGHT: <p><span="number">123</span>text goes here.</p>
WRONG: <a href="http://www.abc.de/<span class="number"123">123<span>/def">link</a>
我的方法行不通。
我的fiddle:
https://jsfiddle.net/huppen/7f1ccvy5/6/
感谢任何解决我问题的建议。
使用 Rejith R Krishnan 的方法解决了问题(感谢!):
$(".ce_text p").contents().filter(function(){
return this.nodeType == 3; //nodeType 3 is the text nodes
}).each(function(i, v) {
$(this).replaceWith(function(){
return this.nodeValue.replace(/(\d+)/g, '<span class="number"></span>')
});
});
您无法通过此查询选择器访问它,另一方面,您可以将 p
标记内的文本置于 span
内并在选择器中使用它。
试试这个解决方案。我在 fiddler 上测试过,它可以工作,但不够优雅:
$.each($('.ce_text p'), function(i, el){
var txt = $(el).find("A").text();
txt = txt.replace(/(\d+)/g, '<span class=number></span>');
txt = txt.substring(txt.indexOf("<span"));
txt = txt.substring(0, txt.indexOf("</span>") + 7);
$(el).find("A").after(txt);
$(el).find("A").remove();
});
您可以使用这种方法。使用 contents()
和 filter()
select 元素中的文本节点,然后用新的 HTML.
替换它们
$(".ce_text p").contents().filter(function(){
return this.nodeType == 3; //nodeType 3 is the text nodes
}).each(function(i, v) {
$(this).replaceWith(function(){
return this.nodeValue.replace(/(\d+)/g, '<span class="number"></span>')
});
});
您好,我尝试将 p-tag 中的数字设置为不同的样式,并防止在 a-tag 中设置样式。 jQuery 将名为 number 的 span-tag 添加到 p-tag,但不应将其添加到 a-tag 的 href 中。
<div class="ce_text">
<p>1234 example <a class="link" href="http://www.abc.de/123/def" target="_blank">www.abc.de/123/def</a> goes on 567.</p>
<a href="http://www.999.com">Link 999 (no function)</a>
<p>1234 example <a class="link" href="http://www.abc.de/123/def" target="_blank">www.abc.de/123/def</a> goes on 567.</p>
</div>
p-tag中的数字应该包含span-tag,a-tag不应该:
RIGHT: <p><span="number">123</span>text goes here.</p>
WRONG: <a href="http://www.abc.de/<span class="number"123">123<span>/def">link</a>
我的方法行不通。
我的fiddle: https://jsfiddle.net/huppen/7f1ccvy5/6/
感谢任何解决我问题的建议。
使用 Rejith R Krishnan 的方法解决了问题(感谢!):
$(".ce_text p").contents().filter(function(){
return this.nodeType == 3; //nodeType 3 is the text nodes
}).each(function(i, v) {
$(this).replaceWith(function(){
return this.nodeValue.replace(/(\d+)/g, '<span class="number"></span>')
});
});
您无法通过此查询选择器访问它,另一方面,您可以将 p
标记内的文本置于 span
内并在选择器中使用它。
试试这个解决方案。我在 fiddler 上测试过,它可以工作,但不够优雅:
$.each($('.ce_text p'), function(i, el){
var txt = $(el).find("A").text();
txt = txt.replace(/(\d+)/g, '<span class=number></span>');
txt = txt.substring(txt.indexOf("<span"));
txt = txt.substring(0, txt.indexOf("</span>") + 7);
$(el).find("A").after(txt);
$(el).find("A").remove();
});
您可以使用这种方法。使用 contents()
和 filter()
select 元素中的文本节点,然后用新的 HTML.
$(".ce_text p").contents().filter(function(){
return this.nodeType == 3; //nodeType 3 is the text nodes
}).each(function(i, v) {
$(this).replaceWith(function(){
return this.nodeValue.replace(/(\d+)/g, '<span class="number"></span>')
});
});