2012-04-20 4 views
0

Чтобы получить все элементы <td> текст, который начинается с «ELEC ...», я делаю -Частичное совпадение на JQuery селектор

$('td.id').each(function(){ 
    if ($(this).text().indexOf('ELEC') == 0) {} 
}); 

Есть более простой способ сделать это, что-то вроде $('td.id:contains("ELEC*")')?

+0

Код, который вы написали, не ищет элементы, текст которых начинается с «ELEC»; он ищет элементы, текст которых содержит «ELEC». Кого вы хотели? –

+0

Потенциальный дубликат, см. [Этот вопрос] (http://stackoverflow.com/questions/1430290/jquery-select-based-on-text) – IronicMuffin

ответ

4

Похоже, что именно то, как вы это делаете (я удалил подстановочную звездочку, так как его не требуется.):

$('td.id:contains("ELEC")') 

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

+0

Ах, я пропустил «начало с» противоречия по вопросу. –

+1

Вопрос неоднозначен - он спрашивает о «начинается с», а затем показывает пример кода, который реализует «содержит». –

5

Чтобы получить только элементы, которые начинаются с ELEC, используйте .filter способ.

$("td.id").filter(function(){ 
    return /^ELEC/.test($(this).text()); 
}); 

или немного более эффективный

var $collection = $("td.id"); 
$collection.filter(function(i){ 
    return /^ELEC/.test($collection.eq(i).text()); 
}); 
+0

yehaww test method – Kristian

+0

Почему это лучше, чем '.indexOf (« Elec ») == 0', который использовал OP? Во всех случаях .indexOf работает быстрее, чем при использовании регулярного выражения. – jfriend00

+0

Лучше, потому что это фактически создает набор элементов, которые вы можете использовать, а не запускать код для каждого элемента отдельно. Например, с моим образцом вы можете сделать '$ collection.addClass (" foobar ")'. Используя его исходный код, он будет делать '$ (this) .addClass ('foobar')' внутри оператора if. –

0

кажется, что если мы объединить лучшее из нескольких предложений, мы получим что-то быстрее, так как регулярное выражение не очень призвало здесь:

$("td.id").filter(function() { 
    return ($(this).text().substr(0, 4) == "Elec"); 
}).whateverMethodYouWant(); 

Или немного быстрее, который использует меньше JQuery:

$("td.id").filter(function() { 
    return ((this.textContent || this.innerText).substr(0, 4) == "Elec"); 
}).whateverMethodYouWant(); 
Смежные вопросы