seleccionar queryselector que name elementos elemento ejemplos buscar attribute javascript css-selectors

javascript - queryselector - La mejor manera de encontrar elementos DOM con selectores css



queryselector javascript ejemplos (5)

¿Cuál es la forma más fácil de encontrar elementos Dom con un selector css, sin usar una biblioteca?

function select( selector ) { return [ /* some magic here please :) */ ] }; select(''body'')[0] // body; select(''.foo'' ) // [div,td,div,a] select(''a[rel=ajax]'') // [a,a,a,a]

Esta pregunta es puramente académica. Me interesa saber cómo se implementa esto y qué son los "problemas". ¿Cuál sería el comportamiento esperado de esta función? (devuelve la matriz, o devuelve el primer elemento Dom, etc.)


Además de los hacks personalizados, en los navegadores recientes puede usar los métodos nativos definidos en el Nivel 1 de la API del W3C Selectores , a saber document.querySelector () y document.querySelectorAll () :

var cells = document.querySelectorAll("#score > tbody > tr > td:nth-of-type(2)");



Crear un motor selector no es una tarea fácil. Sugeriría aprender de lo que ya existe:

  • Sizzle (creado por Resig, usado en jQuery)
  • Peppy (creado por James Donaghue)
  • Sly (creado por Harald Kirschner)

En estos días, hacer este tipo de cosas sin una biblioteca es una locura. Sin embargo, asumo que quieres aprender cómo funciona esto. Le sugiero que mire la fuente de jQuery o una de las otras bibliotecas de javascript.

Teniendo esto en cuenta, la función de selección debe incluir una gran cantidad de declaraciones if / else / else if o switch case para controlar todos los diferentes selectores. Ejemplo:

function select( selector ) { if(selector.indexOf(''.'') > 0) //this might be a css class return document.getElementsByClassName(selector); else if(selector.indexOf(''#'') > 0) // this might be an id return document.getElementById(selector); else //this might be a tag name return document.getElementsByTagName(selector); //this is not taking all the different cases into account, but you get the idea. };


No, no hay construido en modo. Básicamente, si decides ir sin jQuery, estarás replicando una versión con errores en tu código.