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建议的正则表达式。
- 提交按钮不会在IE上触发jQuery bind’ed提交事件
- 在Edge模式下,JQuery tablesorter pager插件无法与IE11一起正常工作
- 在IE 9中为FileReader()填充
- jQuery – 在IE和$(document).ready(function(){})上预期的对象;
- 与e.parentNode.parentNode.childNodes .innerText的Jquery等效/浏览器兼容性;
- 为什么.html工作而不是innerHTML或appendChild
- jquery position()在普通的javascript中
- javascript脚本无法正常工作并崩溃IE
- IE中的Jquery多级列表问题