Массив элементов
Приветствую! Пытаюсь сделать конструкцию вида $('.myclass li a'); - должно вернуть все элементы с тегами a. Остановился на этом моменте..
var $ = function(e) { var getElement = function(e,el){ var el = (el)?el:document; if(e.charAt(0) == '.') { var __e = el.getElementsByClassName(e.substring(1)); } else if(e.charAt(0) == '#') { var __e = el.getElementById(e.substring(1)); } else { var __e = el.getElementsByTagName(e); } return __e; }; element = []; var e = e.split(' '); for(var i in e) { var _e = getElement(e[i],element[(element.length-1)]); element.push(_e); } return _e; } |
Зачем? Самая лучшая документация, это уже готовый и отлаженный велосипед, посмотрите библиотеки, как там реализовано.
А вообще есть такая вещь как querySelectorAll ;) |
может как-то так:
<html> <head> </head> <foo id="foo">foo</foo> <body> <div class="foo"> <ul> <li> <span>span</span> <a href="">foo</a> </li> <li> <a href="">foo</a> </li> </ul> </div> <div class="foo"> <ul> <li> <a href="">foo</a><br> <a href="">bar</a> </li> <li> <a href="">foo</a> </li> </ul> </div> <script> $=function(str){ var arr=str.split(" ") var result=[] ;[].map.call(document.querySelectorAll(arr[0]), function(el){ return [].map.call(el.querySelectorAll(arr[1]), function(el){ return [].forEach.call(el.querySelectorAll(arr[2]), function(el){ result.push(el) }) }) }) return result } console.log ($(".foo li a")) </script> </body> </html> |
Цитата:
Цитата:
//console.log($(".foo li a")); console.log(document.querySelectorAll(".foo li a")); |
nerv_,
И что? ТС'a насколько я понял, интересует возможная реализация, а не то что есть или нет. |
newuser1001,
Вы не поняли, ваша реализация просто бредовая, так как всё это делается одной строкой и ваш код просто лишний. С таким же успехом: <html> <head> </head> <foo id="foo">foo</foo> <body> <div class="foo"> <ul> <li> <span>span</span> <a href="">foo</a> </li> <li> <a href="">foo</a> </li> </ul> </div> <div class="foo"> <ul> <li> <a href="">foo</a><br> <a href="">bar</a> </li> <li> <a href="">foo</a> </li> </ul> </div> <script> $=function(str){ return document.querySelectorAll(str); } console.log ($(".foo li a")) </script> </body> </html> |
Skipp,
Да нет, это Вы не поняли, что пишете бред. Реализация интересна именно сама по себе, безотносительно сахара языка. К примеру, Если бы из языка убрали querySelectorAll что бы Вы делали? Пошли бы на курсы повышения квалификации? Подались бы в дворники? Фактически, это и есть Ваш реальный статус. Программист не должен рассуждать о программировании в терминах сахара языка. |
Цитата:
1. querySelectorAll не в языке, а в DOM 2. ты пытаешься эмулировать метод querySelectorAll с его же помощью. Это уже диагноз) 3. и при этом ты льешь г*вно на нормальных участников форума Цитата:
|
nerv_,
Я все сказал в предыдущем сообщении. Я не собираюсь отвечать каждой шавке. |
Подскажите, кто знает, как в таком случае правильно вызвать функцию, к примеру, var div = d.createElement('div'); $(div).hide();?
var $ = function(e) { var _e = (typeof e == 'object')?e:d.querySelectorAll(e); if((typeof e != 'object') && (!_e[0])) { return null; } if(_e.length == 1) { var _e = _e[0]; } //hide _e.hide = function(){ [].forEach.call(_e,function(el){ el.style.display = 'none'; }) }; //show _e.show = function(){ [].forEach.call(_e,function(el){ el.style.display = ''; }) }; return _e; }; |
Часовой пояс GMT +3, время: 13:32. |