Tengo una función similar a jquery:
function(elem) {
return $('> someselector', elem);
};
La pregunta es ¿cómo puedo hacer lo mismo con querySelector()
?
El problema es que el >
selector querySelector()
requiere que el padre se especifique explícitamente. ¿Hay algún trabajo alrededor?
javascript
css-selectors
selectors-api
desahuciado
fuente
fuente
Respuestas:
Aunque no es una respuesta completa, debe estar atento a la API de selector de W3C v.2, que ya está disponible en la mayoría de los navegadores, tanto de escritorio como móviles, excepto IE (Edge parece ser compatible): consulte la lista de compatibilidad completa .
fuente
:scope
todavía se especifica en drafts.csswg.org/selectors-4/#the-scope-pseudo . Hasta ahora, solo<style scoped>
se eliminó el atributo; no está claro si eso también conducirá a:scope
su eliminación (ya que<style scoped>
fue un caso de uso importante para:scope
).No puedes. No hay ningún selector que simule su punto de partida.
La forma en que jQuery lo hace (más por una forma que se
qsa
comporta que no es de su agrado), es que verifican sielem
tiene una ID, y si no, agregan temporalmente una ID, luego crean una cadena de selección completa.Básicamente harías:
Esto ciertamente no es código jQuery, pero por lo que recuerdo, es básicamente lo que hacen. No solo en esta situación, sino en cualquier situación en la que esté ejecutando un selector desde el contexto de un elemento anidado.
Código fuente de Sizzle
fuente
Completo: polyfill de alcance
Como ha mencionado avetisk, Selectors API 2 usa pseudo-selector. Para que esto funcione en todos los navegadores (que admiten ) aquí está el polyfill
:scope
querySelector
Uso
Por razones históricas, mi solución anterior
Basado en todas las respuestas
Uso
fuente
Date.now()
no es compatible con navegadores más antiguos y podría reemplazarse connew Date().getTime()
Si conoce el nombre de etiqueta del elemento que está investigando, puede usarlo en el selector para lograr lo que desea.
Por ejemplo, si tiene un
<select>
que tiene<option>
s y<optgroups>
, y solo desea los<option>
s que son sus hijos inmediatos, no los que están dentro<optgoups>
:Entonces, teniendo una referencia al elemento seleccionado, puede, sorprendentemente, obtener sus hijos inmediatos de esta manera:
Parece funcionar en Chrome, Safari y Firefox, pero no se probó en IEs. = /
fuente
<ul id="start"> <li>A</li> <li> <ul> <li>b</li> <li>c</li> </ul> </li> </ul> var result = document.getElementById('start').querySelectorAll('ul>li');
-> ¡Se seleccionarán los 4 elementos li!<select>
elementos en el mismo padre.Si finalmente desea encontrar hijos directos (y no, por ejemplo
> div > span
), puede probar Element.matches () :fuente
RECLAMACIÓN
Personalmente, tomaría la respuesta de patrick dw y +1 en su respuesta, mi respuesta es buscar una solución alternativa. No creo que merezca un voto negativo.
Aquí está mi intento:
ver http://jsfiddle.net/Lgaw5/8/
fuente
querySelector
, lo que significa que:eq()
no se puede usar. Incluso si pudiera, su selector devolvería el elemento que tiene:eq()
su apariencia en la página, no:eq()
al índice de su padre (que es donde está obteniendoidx
).elem
está en el índice 4, pero hay un hermano anterior que tiene un elemento diferentetagName
, pero ha anidado dentro de él un elemento con la coincidenciatagName
, ese elemento anidado se incluirá en los resultados antes del que está apuntando, nuevamente arrojando El índice. Aquí hay un ejemplo$('> someselector', elem);
; o)Eso funcionó para mí:
tendrá que pasar el @this keywork antes del> cuando desee buscar hijos inmediatos.
fuente
El siguiente es un método genérico simplificado para ejecutar cualquier consulta de selector de CSS solo sobre hijos directos; también tiene en cuenta las consultas combinadas, como
"foo[bar], baz.boo"
:fuente
Hay una biblioteca relativa a consultas , que es un reemplazo bastante útil para el selector de consultas . Rellena el selector de niños
'> *'
y:scope
(inc. IE8), así como normaliza el:root
selector. También ofrece algunos pseudos relativos especiales como:closest
,:parent
,:prev
,:next
, por si acaso.fuente
verifique si el elemento tiene id; de lo contrario, agregue una identificación aleatoria y busque en función de ella
Hará lo mismo que
fuente