Ich habe ein DOM-Element mit einer ID ähnlich:
something[500]
Das wurde von meiner Ruby on Rails-Anwendung erstellt. Ich muss in der Lage sein, dieses Element über jQuery abzurufen, damit ich mich durch das DOM bewegen kann, um das übergeordnete Element des übergeordneten Elements zu löschen, das eine variable ID hat, auf die ich vorher keinen Zugriff habe.
Weiß jemand, wie ich das machen könnte? Der folgende Code scheint nicht zu funktionieren:
alert($("#something["+id+"]").parent().parent().attr("id"));
Bei weiterer Prüfung Folgendes:
$("#something["+id+"]")
Gibt ein Objekt zurück, aber wenn ich ".html ()" oder ".text ()" darauf ausführe, ist das Ergebnis immer null oder nur eine leere Zeichenfolge.
javascript
jquery
ruby-on-rails
dom
Mike Trpcic
quelle
quelle
Antworten:
Sie müssen die eckigen Klammern entfernen, damit sie nicht als Attributselektoren gezählt werden. Versuche dies:
alert($("#something\\["+id+"\\]").parent().parent().attr("id"));
Siehe Sonderzeichen in Selektoren , insbesondere den zweiten Absatz:
quelle
Sie können auch tun
$('[id="something['+id+']"]')
quelle
Eine ID darf keine eckigen Klammern enthalten. Es ist durch die Spezifikation verboten .
Einige Browser können Fehler korrigieren und verarbeiten, aber Sie sollten Ihre Daten korrigieren, anstatt zu versuchen, mit fehlerhaften Daten umzugehen.
quelle
id
s sind keinename
s, und die meisten Formularhandlerbibliotheken verwenden das Zählen, um mehrere Steuerelemente mit demselben Namen zu durchlaufen, anstatt spezielle Namenskonventionen oder Wahrsagungen.name
Attributs ist keinNAME
Token.Eckige Klammern haben für jQuery-Selektoren eine besondere Bedeutung , die Attributfilter speziell.
Entkomme einfach diesen und es wird dein Element gut finden
$( "#something\\[" + id + "\\]" )
quelle
Versuche dies:
alert($("#something\\["+id+"\\]").parent()[0].parent()[0].attr("id"));
quelle
Sie können ihnen mit entkommen
\\
oder Sie könnten so etwas tun ...$(document.getElementById("something[" + id + "]"))
quelle
"Alle Meta-Zeichen
!"#$%&'()*+,./:;<=>?@[\]^`{|}~
Als wörtlicher Teil eines Namens muss er mit zwei umgekehrten Schrägstrichen versehen werden :
\\
.Beispielsweise kann ein Element mit der ID = "foo.bar" den Selektor verwenden
$("#foo\\.bar")
"[source: jquery doc ] und ein Element mit id =" foo [bar] "(obwohl nicht für W3C gültig, aber von JQuery erkannt) können den Selektor verwenden
$("#foo\\[bar\\]")
(Nur eine Antwort wie die vielen anderen, aber alle zusammen :))
quelle