jQuery文本属性选择器

我试图使用text属性作为选择器,但我不能完全理解这种行为,如果有人可以解释,我会非常感激。 例如,给定text$('a.a_class').text()按预期给出“text”。 但是$('a.a_class[text]')不匹配任何元素, $('span.span_class > a.a_class[text]')也不匹配,但$('span.span_class* > a.a_class[text]')会(尽管不在IE中)。 我能想到的IE唯一的解决方法是循环遍历包含在span中的所有锚点,在每个锚点上使用.text()并将其与特定条件匹配,但它似乎比使用内置选择器慢。 谁有更好的想法?

如何使用自定义选择器

 $(document).ready(function(){ $.extend($.expr[':'], { notext: function(elem, i, attr){ return( $(elem).text() === "" ); } }); }); 

概要

 $('span:notext').remove(); 

你甚至可能想要创建一个处理正则表达式的选择器

 $.extend($.expr[':'], { 'content': function(elem, i, attr){ return( RegExp(attr[3]).test($(elem).text()) ); } }); 

概要

 $('span:content(^api_)').remove(); 

将选择并删除文本以api_开头的所有跨度

这是因为在这种情况下’text’不是属性。 这是元素的内容。

您正在寻找:contains()选择器:

 $('a.a_class:contains(text)'); 

http://api.jquery.com/contains-selector/

请记住,此选择器将匹配字符串的任何部分。 contains(foo)也会匹配“foo bar”。

如果你想要整个文本字符串的完全匹配,你可以使用filter()

 $('a.a_class').filter(function() { return $(this).text() == "text"; }); 

编辑:

要查找内容以值开头的元素,可以在filter()使用正则表达式:

 $('a.a_class').filter(function() { return $(this).text().indexOf( "tex" ) >= 0; }); 

编辑:更新为使用indexOf()而不是@Nick建议的正则表达式。