JQuery根据包含确切文本的子项选择父级

时间:2016-06-29 13:31:54

标签: jquery jquery-selectors

我有以下问题我似乎可以开始工作:我有一组父跨度包含一组不同的标签,但其中只有一个带有文本的其他跨度。我想提取内部跨度具有精确文本匹配的父母!



    <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;
&#13;
&#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 )
               });

非常感谢任何帮助,谢谢!

3 个答案:

答案 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);
    }
});