2010-11-01 14 views
6

Ich spiele mit einigen Selektoren, und ich stoße auf eine Wand mit der Auswahl von Text in einer Zelle.jquery finde Text im Inneren <td>

Hier ist ein einfacher Versuch, den ich mache.

<table> 
<tr> 
    <td>First Name</td> 
    <td>*required</td> 
    </tr> 
</table> 

Ich möchte für diese Zelle, die Klasse ändern „rot“ sein - wenn die Zeichenfolge „* erforderlich“ zu finden ist.

Hier mein Versuch ist am jquery:

$("td:contains('*required')").addClass("red"); 

Es verursacht alle Zellen, die Klasse gelten, so scheint es. Gibt es bessere Möglichkeiten, nach einem bestimmten Text zu suchen?

+0

Soweit ich sehe, funktioniert es wie erwartet. http://jsfiddle.net/nY29Q/ –

+0

Das funktioniert für mich. Könnten Sie den Code, den Sie tatsächlich benutzen, auf http://jsfiddle.net verlinken? – lonesomeday

Antwort

23

Was Sie funktioniert hat, you can test it here, bedenken Sie, dass jeder Eltern<td>auch obwohl den Text enthalten, eine genaue Übereinstimmung tun, dies zu tun:

$("td").filter(function() { return $.text([this]) == '*required'; }) 
     .addClass("red"); 

You can test it here.

+0

+1 schlag mich dazu! – Stephen

+0

Das ist eine interessante Seite. Ich muss es vielleicht Lesezeichen setzen! Der Code, den ich benutze funktioniert, wenn ich ihn auf eine einfache Seite stelle, was bedeutet, dass ich etwas anderes gegen mich arbeiten muss. Ich muss noch mehr Nachforschungen anstellen. – coffeemonitor

+0

Ich bin nicht vertraut mit der '$ .text()' -Funktion - ist es irgendwo dokumentiert? – lonesomeday

5

Sie könnten immer einfach $.filter() verwenden, wobei nur Elemente, für die der Callback True zurückgibt, in der Auswahl enthalten sind. Zum Beispiel:

$('td').filter(function(i) { 
    $(this).html().indexOf('*required') >= 0; 
}); 

auch: Sie wollen mit Ihrem Wähler genauer sein - für Effizienz, und auch wegen Nicks Antwort. Wenn Sie jedoch Effizienz in Betracht ziehen, sollten Sie besser keine Methode verwenden, die einen Callback verwendet. :)

Soweit Selektoren gehen, in Betracht ziehen, $('#tableID > tr > td')... oder etwas ähnliches zu verwenden.

-2

Sie sollten JavaScript nicht verwenden, um dies zu tun. Was Sie verwenden sollten, ist eine CSS-Klasse:

+0

Ich denke, der Punkt ist, dass Zelle nicht die Klasse hat, mit zu beginnen. –

+0

Das ist genau der Punkt. Danke Craver. – coffeemonitor

+0

Haben Sie keine Kontrolle über das Markup? Wie würden Sie in der Lage sein, das JavaScript zu schreiben, aber nicht in der Lage sein, CSS angemessen zu verwenden? Experimentieren Sie nur mit Selektoren als Lernübung? – SnickersAreMyFave

Verwandte Themen