locator attribute javascript xpath greasemonkey

javascript - locator - xpath attribute



Leyendo el valor de una entrada usando XPath, luego usando en Greasemonkey (3)

Estoy usando este XPath para obtener el valor de un campo:

//input[@type="hidden"][@name="val"]/@value

Obtuve varios resultados, pero solo quiero el primero. Utilizando

//input[@type="hidden"][@name="val"]/@value[1]

No funciona Una vez que tengo esto, ¿cómo recojo el valor en Greasemonkey? Estoy intentando cosas como:

alert("val " + val.snapshotItem);

Pero creo que eso es para el nodo, en lugar de la cadena.


Tomalak tiene la idea correcta, pero yo lo haría de manera diferente.

var result = document.evaluate( "//input[@type=''hidden'' and @name=''var'']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); var input = result.iterateNext(); if (input) alert("Found: " + input.value); else alert("Not found.");

De esta forma, especifica como parte del conjunto de resultados que desea que se devuelva solo un elemento (el primero en el documento, en este caso). Además, aquí está buscando el nodo DOM y luego leyendo su propiedad de value para obtener el valor. He encontrado que esto es más confiable que obtener un valor de cadena a través de XPath (aunque su millaje puede variar).


Para el XPath, intente:

//input[@type="hidden" and @name="val" and position() = 1]/@value

Para usar en un script de GreaseMonkey, haz algo como esto:

var result = document.evaluate( "//input[@type=''hidden'' and @name=''var'' and position()=1]/@value", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null ); var hiddenval = result.snapshotItem(0); if (hiddenval) alert("Found: " + hiddenval.nodeValue); else alert("Not found.");

Estrictamente hablando: Usar "position()=1" en el filtro XPath no es absolutamente necesario, ya que solo el primer resultado devuelto se usará de todos modos (a través de snapshotItem(0) ). Pero ¿por qué construir un conjunto de resultados más grande de lo que realmente necesita?

EDITAR: al utilizar un resultado XPath del tipo ORDERED_NODE_SNAPSHOT_TYPE se asegura de obtener los nodos en orden de documento . Eso significa que el primer nodo del resultado también será el primer nodo en el documento.


Una posibilidad es incluir jQuery en tus scripts. Esto proporcionará una sintaxis más simple para acceder a los elementos.

// ==UserScript== // @name MyScript // @namespace http://example.com // @description Example // @include * // // @require http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js // ==/UserScript== var input = $("input[type=''hidden''][name=''var'']"); if (input) { alert("Found: " + input.val()); } else { alert("Not found."); }