Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Массив элементов (https://javascript.ru/forum/events/54603-massiv-ehlementov.html)

cript 24.03.2015 14:58

Массив элементов
 
Приветствую! Пытаюсь сделать конструкцию вида $('.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;
}

Skipp 24.03.2015 15:04

Зачем? Самая лучшая документация, это уже готовый и отлаженный велосипед, посмотрите библиотеки, как там реализовано.
А вообще есть такая вещь как querySelectorAll ;)

newuser1001 24.03.2015 17:20

может как-то так:
<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>

nerv_ 24.03.2015 17:23

Цитата:

Сообщение от newuser1001
может как-то так:

постом выше было написано
Цитата:

Сообщение от Skipp
А вообще есть такая вещь как querySelectorAll

//console.log($(".foo li a"));
console.log(document.querySelectorAll(".foo li a"));

newuser1001 24.03.2015 17:27

nerv_,
И что? ТС'a насколько я понял, интересует возможная реализация, а не то что есть или нет.

Skipp 24.03.2015 17:57

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>

newuser1001 24.03.2015 18:02

Skipp,
Да нет, это Вы не поняли, что пишете бред. Реализация интересна именно сама по себе, безотносительно сахара языка. К примеру, Если бы из языка убрали querySelectorAll что бы Вы делали? Пошли бы на курсы повышения квалификации? Подались бы в дворники? Фактически, это и есть Ваш реальный статус. Программист не должен рассуждать о программировании в терминах сахара языка.

nerv_ 24.03.2015 18:16

Цитата:

Сообщение от newuser1001
Реализация интересна именно сама по себе, безотносительно сахара языка. К примеру, Если бы из языка убрали querySelectorAll что бы Вы делали?

твой код не просто 100% бред, я бы сказал 110% :)
1. querySelectorAll не в языке, а в DOM
2. ты пытаешься эмулировать метод querySelectorAll с его же помощью. Это уже диагноз)
3. и при этом ты льешь г*вно на нормальных участников форума
Цитата:

Сообщение от newuser1001
Подались бы в дворники? Фактически, это и есть Ваш реальный статус

таким тут не место :no:

newuser1001 24.03.2015 18:24

nerv_,
Я все сказал в предыдущем сообщении. Я не собираюсь отвечать каждой шавке.

cript 24.03.2015 23:40

Подскажите, кто знает, как в таком случае правильно вызвать функцию, к примеру, 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, время: 10:32.