2010-02-25 11 views
38

Ho una lista di div che contengono tutti un tag p classificato come index. Il contenuto testuale di questi tag p è un numero compreso tra 1 e n (anche se probabilmente non più di 30-40). Ho avuto il seguente selettore, che ha lavorato bene in fase di test preliminare:Seleziona elemento in base al contenuto testo esatto

var ad = $('.existing_ad .index:contains('+index+')').parents('.existing_ad'); 

Dove index è l'indice numerico ho recuperato dal tag p e .existing_ad è la classe del genitore div. Come ho detto, questo ha funzionato bene ... fino a quando sono andato con numeri più alti. Ad esempio, quando l'indice è , seleziona il .existing_ad s dove l'indice ha un presenti, ad es 1, 10-19, 21, 31, ecc.

Come posso ottenere SOLO l'indice n?

+0

Non sapere questa distinzione può portare a problemi enormi +1 – interpolack

risposta

49

ne dite di questo:

$('.existing_ad .index').filter(function() { 
    return $(this).text() == index; 
}).parents('.existing_ad'); 
+0

ah sì. il mio buon amico 'filter()'. quanto spesso mi dimentico di te. +1, grazie! – Jason

+1

non si dovrebbe utilizzare '' === invece di '' == – Medorator

27

Se si utilizza un sacco, è possibile creare un'estensione

$.expr[":"].containsExact = function (obj, index, meta, stack) { 
    return (obj.textContent || obj.innerText || $(obj).text() || "") == meta[3]; 
}; 

$('div:containsExact('John') corrisponderà <div>John</div> ma non <div>Johnny</div>

Per la domanda originale , sarebbe

var ad = $(".existing_ad .index:containsExact('"+index+"')").parents('.existing_ad'); 
+6

IMHO questo dovrebbe essere la risposta accettata –

+1

Yea questo ha funzionato molto bene per me. Si noti che non ho dovuto utilizzare le virgolette su FTE nel modo seguente: '$ (". Table tr "). Find ('td: first: containsExact (FTEs)'). Text();' – DnfD

+1

Nelle applicazioni pratiche a volte è utile aggiungere un '.trim()' dopo la parentesi di chiusura prima di '== meta [3];' per corrispondere indipendentemente dagli spazi bianchi prima e dopo il testo esatto. – ianmcook

Problemi correlati