我有以下问题我似乎可以开始工作:我有一组父跨度包含一组不同的标签,但其中只有一个带有文本的其他跨度。我想提取内部跨度具有精确文本匹配的父母!
<span class="parent" id="1">
<p>..</p><p>..</p>
<span>text</span>
<a>..</a>
</span>
<span class="parent" id="2">
<span>some text</span>
<a>..</a>
</span>
....
<span class="parent" id="n">
<p>..</p>
<span>other</span>
</span>
&#13;
当我搜索&#34; text&#34;我只想要带有id ==&#34; 1&#34;
的范围我的原始尝试包含返回2个跨度 - &gt; id == 1和id == 2:
var current = "text";
var element = $('.parent:contains(' + current + ')');
我也尝试使用过滤器,我认为这应该可行但不会:(
var element = $('.parent').filter(function () {
return ($(this).children().text()==current );
});
或
var element = $('.parent').filter(function () {
return ($(this).children('span').text() == current )
});
非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
您可以尝试:
var current = "text";
var test = $('.parent').children().filter(function() {
return $(this).text() === current;
});
它看起来像你的一个解决方案但我尝试了我的工作。您可以在此处尝试:https://jsfiddle.net/amwadqm3/。
答案 1 :(得分:1)
如果您坚持使用:contains()css选择器,那么您的代码应如下所示:
var contents = "test";
var element = $('.parent :contains(' + current + ')').parent();
请注意.parent
和:contains()
之间的空格。这会针对给定文本单独查找子项,并返回找到它的元素。然后,您必须使用.parent()
来检索其父元素。
但是,如果放入:contains()
的文字包含特殊字符,则会失败。如果childs文本包含给定文本但与其完全匹配,它也会给出误报。
相反,我们可以使用您发布的过滤器的略微修改版本:
var current = "test";
var element = $(".parent").children().filter(function(){
return $(this).text() == current;
}).parent();
再次注意,这会过滤父母的孩子,而不是父母本身。
答案 2 :(得分:1)
你可以使用:contains或filter函数获取父元素。如果您无法使用:contains或filter函数获取父元素,则可以使用每个循环:
var content = 'test';
var element = '';
$('.parent').each(function() {
var inner_text = $(this).find('span').text();
if(inner_text == content) {
element = $(this);
}
});