Подтвердить что ты не робот

Лучший способ найти элементы DOM с селекторами css

Какой самый простой способ найти элементы Dom с селектором css без использования библиотеки?

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]

Этот вопрос носит чисто академический характер. Мне интересно узнать, как это реализовано и каковы "змеи". Каким будет ожидаемое поведение этой функции? (вернуть массив или вернуть первый элемент Dom и т.д.).

4b9b3361

Ответ 1

В наши дни делать такие вещи без библиотеки - это безумие. Однако я предполагаю, что вы хотите узнать, как это работает. Я бы предложил вам изучить источник jQuery или одну из других библиотек javascript.

С учетом этого функция селектора должна включать в себя множество команд if/else/else if или switch case для обработки всех разных селекторов. Пример:

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.
};

Ответ 2

В дополнение к пользовательским хакам, в последних браузерах вы можете использовать собственные методы, определенные в W3C Selectors API Level 1, а именно документ. querySelector() и document.querySelectorAll():

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

Ответ 3

Создание механизма селектора - непростая задача. Я бы посоветовал узнать, что уже существует:

  • Sizzle (Создано Resig, используемым в jQuery)
  • Peppy (Создано Джеймсом Донахью)
  • Sly (Создано Harald Kirschner)

Ответ 4

Вот хороший фрагмент, который я использовал несколько раз. Его действительно маленький и аккуратный. Он поддерживает все распространенные селектора css.

http://www.openjs.com/scripts/dom/css_selector/

Ответ 5

Нет никаких встроенных способов. По сути, если вы решите пойти без jQuery, вы будете реплицировать ошибку в своем коде.