2011-11-14 22 views
8
var data = { url: $(this).attr('href'), selector: $(this) }; 
history.pushState(data, 'foo', $(this).attr('href')); 

Cuando hago esto me sale un error:Cómo pasar al objeto jQuery history.pushState

Component returned failure code: 0x8000ffff (NS_ERROR_UNEXPECTED) [nsIDOMHistory.pushState]

Si cambio de selección en una cadena, entonces el error desaparece ... Pero Necesito el objeto jQuery, por lo que puedo activar clic en el evento "popstate": s

Respuesta

0

Ampliando las respuestas de Brian Nickel y GregL, puede resolver eso haciendo $ ('#' + this.id) .attr ('href') ... siempre que identifique el DOM como lo sugirieron ambos chicos antes que yo

A veces solo me dan el resultado que quiero por:

var $this = $('#'+this.id); //.... before hand ... 

y me permite ser más creativo con mi ID-ción donde, por ejemplo, podría tener $('#'+this.id+'*locator*');

... id='abGGFather' 
... id='abGFather' 
... id='abFather' 
... id='ab' 
9

Los datos en el estado del historial deben ser serializables. Es decir, debe ser convertible a JSON. $(this) devuelve un objeto similar a una matriz con nodos DOM que no se pueden convertir a JSON. Deberías buscar una forma diferente de hacer lo que estás buscando.

Recuerde, el estado de inserción es solo información útil y no está destinado a ser canónico. Si el usuario no puede obtener el mismo contenido copiando y pegando la URL en la barra de direcciones, tiene un problema.

0

Considere la posibilidad de asignar una ID u otro atributo único al nodo DOM que está representado por el objeto jQuery, luego puede simplemente almacenar el valor de esa ID en su objeto de datos como una cadena, que es serializable.

Si el elemento no tiene una ID única, considere generar una y agregarla al elemento.

3

Puede almacenar una referencia a un objeto rico (no serializable) y luego recuperarlo por referencia.

ver una demostración rápida:

var historyStateReference = { 
    url1:{/*richobj*/}, 
    url2:{/*richobj*/}  
} 
var serializableObj = { 
    richObjRef = "url1", 
    //otherProps 
} 


// pushState with a simple serializable Object 
history.pushState(serializableObj, null, "newPath"); 



// then later refrence it via history.state 
historyStateReference[history.state.richObjRef] ​ 
+0

mayor elemento DOM creará una gran cantidad de carga en la memoria RAM de acuerdo a la página dev Firefox Los datos se almacenan en el disco duro y recuperar sólo cuando es necesario –

+0

No exactamente seguro de lo que está diciendo: por favor, aclaren – adardesign

+0

lo siento, considero esta pregunta de manera incorrecta, pronto eliminaré mis comentarios –

Cuestiones relacionadas