2011-08-03 12 views
7

de los metadatos en la página utilizando nombres de atributos como table:rowNum:<name>, por ejemplo,en javascript dom, ¿existen reglas para los nombres de los atributos? consiguió

 
var row = document.createElement('tr'); 
row.setAttribute('tup','emp:1'); 
row.setAttribute('emp:1:pkid','123'); 

han estado utilizando nombres delimitados por dos puntos (por ejemplo, name='emp:1:emp_id') durante años con buenos resultados, pero hoy en día poco con los dos puntos delimitados por los nombres de atributos

en particular:

 
var el2 = row.parentNode.querySelector("[emp:1:pkid]"); 
=> `Error: SYNTAX_ERR: DOM Exception 12` 

son de carácter especial como ':' dom ilegal en los nombres de atributos? ¿Pueden escaparse los caracteres especiales para trabajar con querySelector()?


desde la consola de cromo:

 
> row.parentNode.querySelector('[emp:1:pkid]'); 
Error: SYNTAX_ERR: DOM Exception 12 

según James (abajo):

 
> row.parentNode.querySelector('[emp\\:1\\:pkid]'); 
123 

pero el problema - no funciona con getAttribute - pia

 
> row.getAttribute('emp:1:pkid'); 
123 
> row.getAttribute('emp\\:1\\:pkid'); 
null 
+0

interesante y aún no estoy seguro (buscándola). Mientras tanto, para futuros proyectos, considere usar 'data()' de jQuery. Te permite establecer cualquier dato arbitrario y asociarlo con tus elementos dom (ambos del servidor para que tu js pueda usarlo y solo del lado del cliente. Http://api.jquery.com/jQuery.data/ – Milimetric

+0

Los atributos DOM son de escriba DOMString que es una secuencia codificada UTF-16. Por lo que puedo decir, los caracteres que está utilizando deberían estar bien. No estoy 100% seguro de eso, aunque de ahí el comentario en lugar de responder. –

+0

@cc young - ' querySelector ('[emp \\: 1]') 'devolverá' null' porque no coincide con un elemento (basado en el ejemplo que publicó originalmente). ¿Quiso decir '[emp \\: 1 \\: actualizar ] '? –

Respuesta

4

Parece que puedes escapar de los personajes especiales con un doble barra invertida:

var el2 = element.querySelector("[emp\\:1\\:update]"); 

Creo que el problema tiene que ver con el hecho de que los dos puntos normalmente indicar un elemento seudo.

De acuerdo con WHATWG spec, todos los caracteres, excepto los que cambiarían el contexto (por ejemplo, un carácter igual, que especifica el inicio del valor o un carácter mayor que el final de la etiqueta). Sobre esa base, está bien usar caracteres de dos puntos en los nombres de los atributos.

actualización (basado en observaciones sobre la respuesta y actualizaciones en cuestión)

de utilizar una variable con tanto querySelector y getAttribute, se podría hacer algo así, o simplemente podría almacenar la versión con caracteres de escape, y uno sin (que definitivamente sería mi opción preferida):

var s = "emp\\:1\\:update"; 
console.log(row.getAttribute(s.replace(/\\/g, ""))); 
+0

buena idea, pero problema: funciona bien con 'querySelector()' pero _fails_ con 'getAttribute()' - vea el área problemática por ejemplo –

+0

Deshágase de los corchetes. 'getAttribute' tak es la cadena completa que se le pasó como el nombre del atributo. –

+0

corchetes: problema con cortar y pegar en el texto de ejemplo. el problema permanece –

Cuestiones relacionadas