Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.08.2015, 13:56
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

зачем нужна сортировка NodeList
В Sizzle, QSA, CSS_selector_engine на выходе елементы сортируются, зачем?
return document.querySelectorAll(selector)

против
return Array.prototype.slice.call(document.querySelectorAll(selector))

кто победит?
зачем нужна сортировка на выходе?
гуголь не помог...
Ответить с цитированием
  #2 (permalink)  
Старый 23.08.2015, 14:50
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

KosBeg, ты о чем, при чем здесь сортировка? NodeList - это псевдомассив (при querySelectorAll к тому же не живой), а Array.prototype.slice делает его истинным массивом) с удобными встроенными методами для работы с ним.

Последний раз редактировалось Rise, 23.08.2015 в 14:52.
Ответить с цитированием
  #3 (permalink)  
Старый 23.08.2015, 14:56
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

Цитата:
не живой псевдо массив javascript
понятно, спасибо)
Ответить с цитированием
  #4 (permalink)  
Старый 23.08.2015, 15:35
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

KosBeg,
var falseArray = { // aka Collection (jquery), NodeList, arguments, etc...
	0: 'Вася',
	1: 'Петя',
	length: 2
};

var trueArray = [ // Array.prototype.slice.call(falseArray)
	'Вася',
	'Петя'
];

Последний раз редактировалось Rise, 23.08.2015 в 15:42.
Ответить с цитированием
  #5 (permalink)  
Старый 23.08.2015, 19:37
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

жаль раньше этого не читал - Внутреннее устройство поисковых методов
PS: маленький но продуктивный поиск по селекторам
sel('div', sel('#root'))

(function(window, document) {
  function classOnly_find(klass, root) { // самый продуктывный поиск по класу, не учитывая getElementsByClassName, взял с yass и модифицировал
    try {
      return root.querySelectorAll('.' + selector)
    } catch (e){}

	klass = ' ' + klass + ' '

    var nodes = root.getElementsByTagName('*'),
      i = 0,
      node,
      sets = [],
      idx = 0

    while (node = nodes[i++]) {
      if ((' ' + node.className + ' ').indexOf(klass) != -1) {
        sets[idx++] = node
      }
    }

    return idx ? sets : []
  }

  function sort_elem(elems) { // сортировка елементов
    return Array.prototype.slice.call(elems)
  }

  window.sel = function(selector, root) {
    var root = root || document,
      elem = 0,
      tmp_selector = 0,
      classOnly = /^\.([\w\-]+)$/,
      idOnly = /^#([\w\-]+)$/,
      tagOnly = /^([\w\-]+)$/

    if (classOnly.test(selector)) {
      tmp_selector = selector.slice(1)
      try {
        elem = root.getElementsByClassName(tmp_selector)
        return elem.length ? sort_elem(elem) : []
      } catch (e) {
        return sort_elem(classOnly_find(tmp_selector, root))
      }
    }

    if (idOnly.test(selector)) {
      tmp_selector = selector.slice(1)
      elem = [root.getElementById(tmp_selector)]
      return elem.length ? sort_elem(elem) : []
    }

    if (tagOnly.test(selector)) {
      elem = root.getElementsByTagName(selector)
      return elem.length ? sort_elem(elem) : []
    }

    elem = root.querySelectorAll(selector)
    return elem.length ? sort_elem(elem) : []
  }
})(window, document)
Ответить с цитированием
  #6 (permalink)  
Старый 24.08.2015, 07:03
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Сообщение от KosBeg Посмотреть сообщение
return Array.prototype.slice.call(document.querySelectorAll(selector))
Array.from(document.querySelectorAll(selector));

Используйте уже ES6.
Ответить с цитированием
  #7 (permalink)  
Старый 24.08.2015, 15:33
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Erolast
Используйте уже ES6.
[...document.querySelectorAll(selector)]
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #8 (permalink)  
Старый 24.08.2015, 15:52
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Сообщение от FINoM Посмотреть сообщение
[...document.querySelectorAll(selector)]
Аха, или так.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зачем нужен bind? govnocoder Общие вопросы Javascript 4 02.09.2014 02:20
Нужна ли вышка? l-liava-l Оффтопик 135 15.05.2013 23:20
Зачем у NodeList и HTMLCollection свойство length enumerable? danik.js Общие вопросы Javascript 5 27.03.2013 11:02
Зачем нужна session_ destroy() ? jsuse Серверные языки и технологии 2 03.03.2012 08:19
Зачем нужна консоль? TicTac Общие вопросы Javascript 7 05.06.2011 12:32