我对找到A标签的元素上的Jquery find('*')感到有些困惑。我的示例代码如下:
<ul>
<li id="cell1" data-link="Page 1">
<p>Example text</p>
</li>
<li id="cell2" data-link="Page 2">
<h2 class="story-body__crosshead">More from our Diet Debate series:</h2>
<p><a href="http://www.bbc.co.uk/news/health-35150598" class="story-body__link">Read: Is breakfast a waste of time?</a></p>
<p><a href="http://www.bbc.co.uk/news/health-35215686" class="story-body__link">Watch: How healthy is your breakfast?</a></p>
</li>
<li id="cell3" data-link="Page 3">Cell 3</li>
<li id="cell4" data-link="Page 4">Cell 4</li>
</ul>
Js代码
$(elem).find('*').each(function(){
if ($(this).html().indexOf('breakfast') > 0){
alert($(this).html());
}
});
警报但每个A标签警告两次。它显示内部文本和外部文本(完整的html)。但是我依赖于移动元素并替换它们,因此这段代码最终在同一页面上输出两次链接。我错过了一些明显的东西吗?
答案 0 :(得分:3)
您的代码与file://affiliate.flipkart.com/widget/displayWidget?wrid=...
代码和 a
代码的任何祖先相匹配,因为a
匹配*
中的所有DOM元素(这是你的LIs)。在您的示例中,它将匹配elem
代码以及p
代码。
使用仅定位a
代码的范围选择器:
e.g。
a
使用// Elem here is the li about
$("a", elem).each(function(){
if ($(this).html().indexOf('breakfast') >= 0){
alert($(this).html());
}
});
更简单:
:contains
注意:您的代码仅允许包含$("a:contains(breakfast)", elem).each(function(){
alert($(this).html());
});
但不包含breakfast
的文本(例如,如果它位于开头并大写),因为该检查区分大小写。