jQuery: содержит селектор для поиска нескольких строк

Предполагая, что у меня есть:

  • Mary
  • John, Mary, Dave
  • John, Dave, Mary
  • John
  • Если мне нужно найти все

  • Элементы, содержащие «John» и «Mary», как бы я построил jQuery?

    Поиск одной строки кажется простым:

     $('li:contains("John")').text() 

    Я ищу что-то вроде следующего псевдокода:

     $('li:contains("John")' && 'li:contains("Mary")').text() 

    Благодаря!

    ответ

    Это вот так:

     $('li:contains("Mary"):contains("John")') 

    объяснение

    Просто подумайте о :contains как если бы это было объявление classа, например .class :

     $('li.one, li.two'). //you want either one OR two $('li.one.two'). //you want BOTH on one element // same with :contains $('li:contains("mary"), li:contains("john")'). // either mary OR john $('li:contains("mary"):contains("john")'). //li, which contains both 

    демонстрация

    http://jsbin.com/ejuzi/edit

  • Как насчет

     $('li:contains("John"),li:contains("Mary")') 

    Ответ

    Правильный синтаксис будет равен $("li:contains('John'),li:contains('Mary')").css("color","red")

    Но я узнал, что если у вас было много случаев для тестирования, jQuery будет работать очень плохо (особенно на IE6, я знаю, он старый, но все еще используется). Поэтому я решил написать свой собственный фильтр атрибутов.

    Вот как это использовать: $("li:mcontains('John','Mary')").css("color","red")

    Код

     jQuery.expr[':'].mcontains = function(obj, index, meta, stack){ result = false; theList = meta[3].split("','"); var contents = (obj.textContent || obj.innerText || jQuery(obj).text() || '') for (x=0;x= 0) { return true; } } return false; }; 

    Это просто:

     $("li:contains('John'):contains('Mary')") 
    Давайте будем гением компьютера.