Trova l’elemento DOM per ID quando l’ID contiene parentesi quadre?

Ho un elemento DOM con un ID simile a:

something[500] 

che è stato creato dall’applicazione Ruby on Rails. Devo essere in grado di ottenere questo elemento tramite jQuery in modo da poter attraversare il mio modo sul DOM per eliminare il genitore del suo genitore, che ha un ID variabile a cui non ho accesso in precedenza.

Qualcuno sa come potrei fare questo? Il seguente codice non sembra funzionare:

 alert($("#something["+id+"]").parent().parent().attr("id")); 

Su ulteriore ispezione, il seguente:

 $("#something["+id+"]") 

restituisce un object, ma quando eseguo “.html ()” o “.text ()” su di esso, il risultato è sempre nullo o solo una stringa vuota.

Qualsiasi aiuto sarebbe molto apprezzato.

È necessario sfuggire alle parentesi quadre in modo che non vengano conteggiati come selettori di attributo. Prova questo:

 alert($("#something\\["+id+"\\]").parent().parent().attr("id")); 

Vedi Caratteri speciali nei selettori , in particolare il secondo paragrafo:

Per utilizzare uno qualsiasi dei meta-caratteri (come !"#$%&'()*+,./:;<=>[email protected][\]^``{|}~ ) Come parte letterale di un nome , deve essere sfuggito con due barre rovesciate: \\ . Ad esempio, un elemento con id="foo.bar" , può usare il selettore $("#foo\\.bar") . La specifica CSS W3C contiene il completo insieme di regole relative ai selettori CSS validi . È utile anche il post di blog di Mathias Bynens sulle sequenze di escape dei caratteri CSS per gli identificatori .

Un id non può includere parentesi quadre. È vietato dalle specifiche .

Alcuni browser potrebbero correggere errori e far fronte, ma è necessario correggere i dati anziché tentare di gestire i dati non validi.

Le parentesi quadre hanno un significato speciale per i selettori jQuery , i filtri degli attributi in particolare.

Basta sfuggire a questi e troverà il tuo elemento bene

 $( "#something\\[" + id + "\\]" ) 

Puoi anche fare

 $('[id="something['+id+']"]') 

Prova questo:

 alert($("#something\\["+id+"\\]").parent()[0].parent()[0].attr("id")); 

Puoi sfuggirli usando \\ o potresti fare qualcosa di simile …

 $(document.getElementById("something[" + id + "]")) 

“Qualunque dei meta-caratteri

 !"#$%&'()*+,./:;<=>[email protected][\]^`{|}~ 

come parte letterale di un nome, deve essere sfuggito con due barre rovesciate: \\ .

Ad esempio, un elemento con id = “foo.bar”, può usare il selettore

 $("#foo\\.bar") 

“[fonte: jquery doc ], e un elemento con id =” foo [bar] “(anche se non valido per W3C ma riconosciuto da JQuery), può usare il selettore

 $("#foo\\[bar\\]") 

(Solo come tanti altri, ma tutti insieme :))