/ / jQuery non sta afferrando un elemento in base al selettore ID: jquery, html, html-table, jquery-selors

jQuery non acquisisce un elemento basato sul selettore ID: jquery, html, html-table, jquery-selectors

Sto usando jQuery 1.7.1 e nessun'altra libreria / framework JS. Posso selezionare la maggior parte degli elementi bene, fatta eccezione per una tabella particolare che mi dà problemi. Questo accade sia in Firefox che in Chrome.

Ecco un'immagine che descrive tutto:

Console JavaScript di Chrome

I passaggi in questa immagine, in ordine:

  1. Seleziono tutte le tabelle nella pagina
  2. Seleziono una tabella diversa da quella che desidero
  3. Ho impostato quella tabella su "display: none" (solo per illustrare che a jQuery non interessa "display: none")
  4. Seleziono di nuovo quel tavolo, ora che è stato nascosto. Va tutto bene.
  5. Quindi provo a selezionare la tabella che voglio davvero. Non ricevo nulla in cambio.
  6. Uso l'array iniziale di tabelle per assegnare la tabella che desidero a una variabile.
  7. jQuery ha restituito quella tabella bene, ed è ora nella variabile "theTableIWant".
  8. L '"id" della tabella è esattamente lo stesso "id" che stavo selezionando nel passaggio 5, che non ha funzionato.

Perché non vado a consegnarmi il tavolo? Perché potrebbe succedere?

risposte:

3 per risposta № 1

Non funziona perché # è un carattere speciale nei selettori jQuery per ID "s, quindi ottieni questo errore: Syntax error, unrecognized expression: #office_set-###

Se devi davvero usare ### nell'ID (non lo consiglierei per il motivo pubblicato da Matt) puoi evitarlo nella selezione in questo modo:

​$("#office_set-\#\#\#")

Esempio - http://jsfiddle.net/infernalbadger/fpcME/

Devi raddoppiare come vuoi davvero passare al motore di selezione jQuery.


2 per risposta № 2

"#" non è ufficialmente valido negli ID DOM: http://www.w3.org/TR/REC-xml/#NT-Name e quindi non otterrai un supporto coerente.


2 per risposta № 3

Non dovresti usare nessuno di questi meta-caratteri: !"#$%&"()*+,./:;<=>?@[]^{|}~ nei tuoi ID, classi tagname, attributi e valori (anche il backtick: `, ma non posso inserirlo in un blocco di codice ^^).

se devi usare questi personaggi, puoi sfuggirli nel tuo selettore con due barre rovesciate

$("#office_set-\#\#\#")

a proposito la tua domanda è davvero rilevante quando questii caratteri vengono utilizzati come codice javscript, ad es. in un attributo onclick. Puoi trovare elementi contenenti un codice specifico solo quando esci correttamente dai meta-caratteri (di cui ce ne saranno molti).

Fonte e maggiori informazioni qui: http://api.jquery.com/category/selectors/


0 per risposta № 4

1) Assicurarsi che il selettore della tabella al punto 5 sia corretto. Forse c'è più di un elemento con lo stesso ID.

2) Quando assegni un elemento JQuery a una variabile non puoi chiamare gli attributi DOM grezzi in questo modo. Prova:

theTableIWant.attr("id");

O:

var theTable = $(theTableIWant).get(0);
theTable.id;

0 per risposta № 5

Devi citare i # caratteri nel tuo ID, poiché quel personaggio è un personaggio speciale di jQuery.

$("#office_set-\#\#\#");

Sono doppie barre rovesciate, quindi JavaScript le converte in barre singole che jQuery vede.