2015-08-17 13 views
11

Come si scrive un'espressione jQuery che troverà input in cui il valore dell'attributo name è diverso dal valore dell'attributo id?Trova elementi in cui il nome è diverso da id utilizzando jQuery

Questo si deve trovare

<input name="foo" id="bar" /> 

Questo non dovrebbe essere trovata

<input name="foo" id="foo" /> 

cose banali come $('input[name!=id]') fallisce, perché il [] espressione expects a constant on the right hand side.

+0

Non sono sicuro che sia possibile eseguire tali confronti all'interno del selettore. C'è qualche ragione per cui non è possibile iterare su ciascun articolo e verificarli singolarmente? – Lix

+0

Preferisco un selettore, ma mi accontento della risposta di @Rejith – vektor

risposta

18

È possibile eseguire questa operazione utilizzando la funzione filter(). E usa l'assetto per essere sicuro.

Edit Versione semplice

$('input').filter(function(){ 
    return this.id != this.name; 
}); 

Se ci sono problemi a causa delle finali o portano gli spazi, quindi il seguente può essere utilizzato.

$('input').filter(function(){ 
    thisID = $.trim(this.id); 
    thisName = $.trim(this.name); 
    return thisID != thisName; 
}); 
+7

Il ritaglio sembra un'aggiunta arbitraria a quel filtro ... – canon

+0

@canon senza ritaglio se c'è uno spazio accidentale come id = "foo" non penserà che sia uguale a name = "foo". Quindi se OP vuole contare "foo" e "foo" come diversi allora hai ragione è arbitrario, ma penso che vorrebbe che fossero gli stessi. – DasBeasto

+5

'document.getElementById (" test ")' non troverà un elemento con un 'id' di' "test" '. Gli spazi contano. Stando così le cose, non ha molto senso usare una partita fuzzy se non esplicitamente desiderato. – canon

Problemi correlati