Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.06.2012, 13:09
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Очередной черновик по селекторам
На W3.org выложили очередной черновик по Selector API 2, кому интересно вот. Что больше поразило, воткнули пару новых методов, особо сильно не отличающих от querySelector/querySelectorAll называются find/findAll отличия лишь в том что можно будет указывать контекст поиска вторым параметром. Ну и еще matches укороченный.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #2 (permalink)  
Старый 29.06.2012, 13:57
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Хорошая Новость!
Ответить с цитированием
  #3 (permalink)  
Старый 29.06.2012, 18:45
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Maxmaxmахimus
это вся их работа? или я что-то не понял
не совсем так, но в принципе да. Примерно так:
Element.prototype.find = Document.prototype.find = DocumentFragment.prototype.find = function( selector, context ) {
    return ( context || this ).querySelector( selector );
}
 
Element.prototype.findAll = Document.prototype.findAll = DocumentFragment.prototype.findAll = function( selector, context ) {
    return ( context || this ).querySelectorAll( selector );
}
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 29.06.2012 в 19:22.
Ответить с цитированием
  #4 (permalink)  
Старый 29.06.2012, 18:54
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

вот если бы они добавили в NodeList подобные методы, цены бы небыло. Что-то типо этого:
document.querySelectorAll('div[data-lala="tratat"]').find('a');
то-есть искать в найденном ранее. что бы не делать так:
var result = [], a = document.querySelectorAll('div[data-lala="tratat"]');
for( var i = 0; i < a.length; i++ ) {
    result = result.concat( a[ i ].querySelectorAll('a') );
}
цены бы им не было.. а так да добавили ерунду.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #5 (permalink)  
Старый 29.06.2012, 20:50
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Maxmaxmахimus
ведь селекторы и так могут искать в найденном)
правда чтоль? а у меня почему то в консоль ошибка лезет:
<div><a></a></div>
<div><a></a></div>
<script>
    alert( document.querySelectorAll('div').querySelectorAll('a'));
</script>
у меня в консоле вот что:
[29.06.2012 20:48:30] JavaScript - http://lookatcode.com/showhtml
Inline script thread
Uncaught exception: TypeError: 'document.querySelectorAll('div').querySelectorAll' is not a function
Error thrown at line 2, column 4 in http://lookatcode.com/showhtml:
    alert( document.querySelectorAll('div').querySelectorAll('a'));
а у тебя что то иное чтоль?
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #6 (permalink)  
Старый 29.06.2012, 23:23
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Maxmaxmахimus
в строчке с селектором просто через пробел пиши следующий селектор
ты не понял.. это понятно что оно так будет работать, но иногда нужно найти в том что уже где-то в коде выдал селектор.. а не писать длиннющий селектор каждый раз..
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #7 (permalink)  
Старый 29.06.2012, 23:31
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Maxmaxmахimus
а можно пример?
возьми к примеру джуквери, там подобное реализовано:
var blocks = jQuery("div.blocks");

blocks.click(function() {
    // ... some code
    var spans = blocks.find( 'span.tratata' ).show(); // ищем в уже найденном ранее списке.
    // ... some code
    spans.find("b").html( '' ); // так же ищем в уже найденном списке
    // ... some code
});

а если писать постоянно вбивая одни и те же селекторы то будет выглядеть так:
jQuery("div.blocks").click(function() {
    // ... some code
    jQuery("div.blocks span.tratata" ).show();
    // ... some code
    jQuery("div.blocks span.tratata b").html( '' );
    // ... some code
});
куда удобнее и производительный вариант выше
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 29.06.2012 в 23:35.
Ответить с цитированием
  #8 (permalink)  
Старый 29.06.2012, 23:48
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

вообщем очень было бы не плохо иметь подобную реализацию:
NodeList.prototype.querySelector = function( selector ) {

    var elem, listLength = this.length;

    for( var i = 0; i < listLength; i++ ) {
        if ( elem = this[ i ].querySelector( selector ) ) {
            return elem;
        }
    }

    return null;
}

NodeList.prototype.querySelectorAll = function( selector ) {

    var result = [], // Instead the Array, use NodeList
        listLength = this.length;

    for( var i = 0; i < listLength; i++ ) {
        result = result.concat( Array.prototype.slice.call( this[ i ].querySelectorAll( selector ), 0 ) );
    }

    return result;
}

// но назначение прототипов объекту NodeList эфекта никакого не дает
// тоесть сделав такую хрень:
alert( document.querySelectorAll('div').querySelectorAll ); // получим undefined
// браузеры не добавляют пользовательский метод экземпляру NodeList
// хотя тестил я тока в опере.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #9 (permalink)  
Старый 30.06.2012, 00:39
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от devote
возьми к примеру джуквери, там подобное реализовано:
получается, она повлияла на решения W3C ? о ужас
Ответить с цитированием
  #10 (permalink)  
Старый 30.06.2012, 01:05
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от melky
получается, она повлияла на решения W3C ? о ужас
нет она еще ни на что не повлияла, так как там еще нет такого. Но если бы было, то это было просто идеальным решением. Хотя конечно можно юзать каждый раз прогоняя через for.

Да и в принципе оно есть, но не совсем полноценное. Возьми к примеру getElementsByTagName он же возвращает NodeList и при поиске можно указать контекст, но лишь из отдного элемента а не из списка. А в джуквери а точнее во всех селекторах написанных людьми, можно список элементов указать в контексте.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 30.06.2012 в 01:11.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли чтобы форум создавал 1 Черновик Gozar Сайт Javascript.ru 12 11.03.2012 10:15
Вопрос по селекторам в jquery LeBron jQuery 3 29.02.2012 15:59
Люблю политику. В Москве подожгли очередной офис "Единой России". Это случайность или elf2002 Оффтопик 2 09.01.2012 16:19
очередной autocomplete dr83 jQuery 1 30.07.2011 00:40
поиск по CSS селекторам, YASS Aluc Библиотеки/Тулкиты/Фреймворки 2 03.03.2011 23:17