代码之家  ›  专栏  ›  技术社区  ›  Shagglez

jquery文本属性选择器

  •  1
  • Shagglez  · 技术社区  · 16 年前

    我正试图使用文本属性作为选择器,但是我不能完全理解行为,如果有人能解释的话,我会非常感激。例如给出 <span class="span_class"><a class="a_class">text</a></span> , $('a.a_class').text() 按预期提供“文本”。然而 $('a.a_class[text]') 不匹配任何元素,也不匹配 $('span.span_class > a.a_class[text]') 但是 $('span.span_class* > a.a_class[text]') 会(虽然不是在IE中)。 对于IE,我唯一能想到的解决方法是循环遍历包含在一个范围内的所有锚,对每个锚使用.text(),并根据特定条件匹配它,但它似乎比使用内置选择器慢。有人有更好的主意吗?

    2 回复  |  直到 16 年前
        1
  •  3
  •   jAndy    16 年前

    使用自定义选择器怎么样

    $(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_

        2
  •  3
  •   user113716    16 年前

    这是因为在这种情况下,“文本”不是属性。它是元素的内容。

    你在找 :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";
    });
    

    编辑:

    要查找内容以值开头的元素,可以在 过滤器() :

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

    编辑: 更新使用 indexOf() 而不是@nick推荐的regex。