2009-10-16 6 views
1

У меня проблема с contains в jquery. Кажется, что он принимает только одно слово. Не фраза или два слова.Является ли jquery «: содержит» селектор принимает такую ​​ценность «Банковское дело и финансы»?

Пример:

$('#div:contains('Word')'); --> This is okay 

$('#div:contains('Just another word')'); --> This will return empty/this will not match. 

У вас есть опыт работы с такой проблемой?

Ваш ответ очень приветствуется.

+1

Разве вы не избегаете этих цитат? – Aistina

+0

@Aistina: Я думаю, что вы правы - у меня нет этой проблемы. Не знаю, почему первый пример будет работать. – Pandincus

+0

Да! Я уже пробовал это, но у меня все еще нет результата. –

ответ

4

Что вам нужно, чтобы использовать двойные кавычки (вместо этих одинарных кавычек упаковочных всего селектора), например:

$("p:contains('John Resig')"); 

это выбрать правильный пункт, со строкой «Резигом» внутри

или вы можете инвертировать его:

$('p:contains("John Resig")'); 

или вы можете использовать старое доброе вытекание:

$('p:contains(\'John Resig\')'); 
1

Попробуйте без # и избежать использования того же процитировать в коде: -

$ ("ДИВ: содержит ('Просто еще одно слово')");

+0

О, да, не заметил, что саммер использовал «#» перед селектором. Это и цитаты должны быть, почему его не работает: -P – Pandincus

+0

Прошу прощения за то, что я не так ясен. Это правильная вещь, $ ('# div') -> $ ('# div'); –

+0

Не уверен, что вы имеете в виду самер. Вы используете только #, когда хотите получить определенный элемент по id. Я уверен, что в этих случаях не работает, поскольку он предназначен для поиска любого из указанных элементов, содержащих текст, который вы включаете. Для проверки содержимого конкретного элемента будет больше строк if ($ («# div»). Html(). IndexOf («моя строка»)> - 1) –

0

Предполагая, что вы ничего уже не решить эту проблему, с вашего комментария, который включал:

var selected = $(this).find(':selected').text(); 
if (selected.toLowerCase() != "all industries") { 
    if (trim(selected).length > 0) { 
     $("#contact-list-selectable li .contact-info-industry").parent().css("display", "none"); 
     $("#contact-list-selectable li .contact-info-industry:contains('" + selected + "')").parent().css("display", "block"); 
     alert($("li[style='display: block;']").text()); 
} 

я предполагаю, что вы имели в виду использовать обивку в качестве метода на строке, или если не то, что у вас есть облицовку функция определена где-то еще. Если это на самом деле выглядит, как выглядит ваш код, и у вас нет пользовательской функции обрезки, то это будет вашей первой проблемой, это должно быть: selected.trim().length

Одна из потенциальных проблем заключается в том, что, пока вы проверяете, что обрезка выбрана> 0 , вы не используете обрезанную версию, выбранную при проверке содержимого. Если у вас есть пробелы/etc в выбранной вами переменной, она не будет содержать.

Here is an example. Обратите внимание на заднее пространство в selected = "computer science ";, которое намеренно демонстрирует, что происходит в этом случае.

если изменить

$("#contact-list-selectable li .contact-info-industry:contains('" + selected + "')").parent().css("display", "block"); 

в

$("#contact-list-selectable li .contact-info-industry:contains('" + selected.trim() + "')").parent().css("display", "block"); 

вы можете избежать этой проблемы (рабочий пример, see here, обратите внимание, тянущаяся пространство все еще там).

Единственная проблема, о которой я мог думать, - это если вы неправильно сформировали какой-либо из ваших селекторов, и они фактически не соответствовали вашей структуре DOM. В противном случае все работает отлично в текущем jquery.