2012-04-20 4 views
0

Pour obtenir tout le texte <td> éléments qui commence par « ELEC ... », je fais -Correspondance partielle du sélecteur JQuery

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

Est-il possible de le faire, quelque chose comme simple $('td.id:contains("ELEC*")')?

+0

Le code que vous avez écrit ne cherche pas les éléments dont le texte commence par "ELEC"; il cherche des éléments dont le texte contient "ELEC". Lequel voulez-vous? –

+0

Copie potentielle, voir [cette question] (http://stackoverflow.com/questions/1430290/jquery-select-based-on-text) – IronicMuffin

Répondre

4

On dirait que c'est exactement comment vous le faites (je l'ai enlevé l'astérisque joker, comme pas nécessaire.):

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

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

+0

Ahh, j'ai manqué la contrainte "commence par" sur la question. –

+1

La question est ambiguë - elle demande à propos de "commence par", puis montre un exemple de code qui implémente "contient". –

5

Pour obtenir uniquement les éléments qui commencent par ELEC, utilisez la .filter méthode.

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

ou un peu plus efficace

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

Méthode de test yehaww – Kristian

+0

Pourquoi est-ce mieux que le '.indexOf (" Elec ") == 0' que l'OP utilisait? Dans tous les cas, .indexOf est plus rapide que l'utilisation d'une regex. – jfriend00

+0

Il est préférable que celui-ci crée réellement une collection d'éléments que vous pouvez utiliser plutôt que d'exécuter du code sur chaque élément individuellement. Par exemple, avec mon exemple, vous pouvez faire '$ collection.addClass (" foobar ")'. En utilisant son code original, il ferait '$ (this) .addClass ('foobar')' à l'intérieur de l'instruction if. –

0

Il semble que si nous combinons le meilleur de plusieurs propositions différentes, nous obtiendrions plus vite quelque chose depuis un regex est pas vraiment appelé ici:

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

Ou un peu plus rapide, qui utilise moins jQuery:

$("td.id").filter(function() { 
    return ((this.textContent || this.innerText).substr(0, 4) == "Elec"); 
}).whateverMethodYouWant(); 
Questions connexes