2015-08-17 8 views
11

Jak napisać wyrażenie jQuery, które znajdzie dane wejściowe, gdzie wartość atrybutu name różni się od wartości atrybutu ?Znajdź elementy, w których nazwa jest inna niż id, używając jQuery

ten powinien znaleźć

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

To nie powinno się znaleźć

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

Trivial rzeczy jak $('input[name!=id]') zawiedzie, ponieważ wyrażenie expects a constant on the right hand side[].

+0

nie jestem pewien, że jest to możliwe do przeprowadzenia takich porównań wewnątrz selektora - Czy jest jakiś powód, dla którego nie są w stanie iteracyjne nad każdej pozycji i zweryfikować je indywidualnie? – Lix

+0

Wolałbym selektor, ale ustalam z odpowiedzią @Rejith – vektor

Odpowiedz

18

Możesz to zrobić, używając funkcji filter(). I użyj wykończenia, aby się upewnić.

Edit Prosta wersja

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

Jeśli są jakieś problemy z powodu spływu lub spacje, następnie następujące mogą być użyte.

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

Przycinanie wydaje się być dowolnym dodatkiem do tego filtru ... – canon

+0

@canon bez przycinania, jeśli istnieje przypadkowe miejsce, takie jak id = "foo" nie będzie myślał, że jest równy nazwie = "foo". Tak więc, jeśli OP chce policzyć "foo" i "foo" jako różne, to masz rację, jeśli chodzi o jego dowolność, ale myślę, że chciałby, żeby były takie same. – DasBeasto

+5

'document.getElementById (" test ")' nie znajdzie elementu z 'id' z' "testu" '. Przestrzenie mają znaczenie. W tym przypadku nie ma sensu używać dopasowania rozmytego, chyba że jest to wyraźnie pożądane. – canon

Powiązane problemy