tutorial than greater child and xpath predicate

than - Combina predicado XPATH con posición



xpath javascript tutorial (3)

Tengo una colección de elementos div que tienen la clase media-gallery-item .
Me gustaría seleccionar el número de elemento x.

Cuando selecciono todos los elementos, obtengo 5 resultados

$x("//div[@id=''content-area'']//div[@class=''media-gallery-item'']")

Ahora quiero poder seleccionar el ítem número 2, pero no puedo entender cómo combinar los dos correctamente:

$x("//div[@id=''content-area'']//div[@class=''media-gallery-item''][2]") $x("//div[@id=''content-area'']//div[@class=''media-gallery-item'' and position() = 2]")

Sé que estos no tienen mucho sentido ya que no es un AND real, sino más bien como: "filtrar de acuerdo con esto primero, luego seleccionar el segundo partido". El objetivo de esto es seguir seleccionando cosas (por ejemplo, en el segundo elemento, href atributo href del elemento a)


Parece que tienes acceso a los atributos de la manera incorrecta. Tratar de usar

/div[@id=''content-area'' and @class=''media-gallery-item''][2]


Resulta: paréntesis!

(//div[@id=''content-area'']//div[@class=''media-gallery-item''])[2]

trabajos


Respuesta paso a paso.

Para seleccionar elementos con un antecesor div[@id=''content-area''] , que son los segundos hijos de sus respectivos padres, use:

//div[@id=''content-area'']//div[2]

Para seleccionar el segundo elemento de div (en orden de documento) con un antecesor div[@id=''content-area''] use:

(//div[@id=''content-area'']//div)[2]

Toma nota de la diferencia.

Luego, para seleccionar elementos, que son segundos hijos de sus respectivos padres, siempre que tengan una clase ''media-gallery-item'' use:

//div[@id=''content-area'']//div[2][@class=''media-gallery-item'']

Para seleccionar elementos, que son los segundos de esos hijos (de sus respectivos padres) que tienen una clase media-gallery-item :

//div[@id=''content-area'']//div[@class=''media-gallery-item''][2]

Para seleccionar el segundo elemento div (en orden de documento) con un antecesor div[@id=''content-area''] , siempre que tenga media-gallery-item clase media-gallery-item :

(//div[@id=''content-area'']//div)[2][@class=''media-gallery-item'']

Para seleccionar el segundo (en orden de documento) de todos los elementos div con un ancestro div[@id=''content-area''] y una clase media-gallery-item :

(//div[@id=''content-area'']//div)[@class=''media-gallery-item''][2]

Presupuestos de especificación sugeridos por @Alejandro:

Un predicado filtra un conjunto de nodos con respecto a un eje para producir un nuevo conjunto de nodos. Para cada nodo en el conjunto de nodos que se filtrará, PredicateExpr se evalúa con ese nodo como el nodo de contexto, con el número de nodos en el conjunto de nodos como tamaño de contexto y con la posición de proximidad del nodo en el nodo -set con respecto al eje como la posición de contexto

http://w3.org/TR/xpath/#predicates

La posición de proximidad de un miembro de un conjunto de nodos con respecto a un eje se define como la posición del nodo en el conjunto de nodos ordenado en orden de documento si el eje es un eje hacia adelante y ordenado en orden de documento inverso si el eje es un eje reverso

http://w3.org/TR/xpath/#dt-proximity-position

La conclusión es que el predicado de posición funciona con respecto al eje. Y necesita paréntesis para declarar explícitamente la prioridad. Por lo tanto, al calcular la posición no se tendrá en cuenta el eje child , sino el conjunto de nodos después de resolver descendant-or-self eje descendant-or-self .