Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Доступ к элементу в дереве DOM (https://javascript.ru/forum/events/47370-dostup-k-ehlementu-v-dereve-dom.html)

OlegALL 21.05.2014 07:30

Доступ к элементу в дереве DOM
 
Привет
Есть разметка
<ul>
      <li><img src="1.png"></li>
      <li><img src="2.png"></li>
      <li><img src="3.png"></li>
      <li><img src="4.png"></li>
      <li><img src="5.png"></li>
      <li><img src="6.png"></li>
      <li><img src="7.png"></li>
      <li><img src="8.png"></li>
      <li><img src="9.png"></li>
      <li><img src="10.png"></li>
</ul>


нужно переписать строку, удаляющую Li с jQuery
$("ul li:first").remove();

на javascript. Я написал

var mainObj = document./*getElementsByTagName("ul").*/getElementsByTagName("li")[0];
var img = mainObj.firstChild;
mainObj.removeChild(img);


Сначала хочу удалить img, а потом li, сразу li не знаю как

Сейчас работает, но не всегда. Если раскомментировать, будет ошибка. Нужен полный аналог строки $("ul li:first").remove();

Aetae 21.05.2014 08:11

var ul = document.getElementsByTagName("ul");
for(var i = 0; i < ul.length; i++){
    var li = ul[i].getElementsByTagName("li")[0];
    if(li){
        li.parentNode.removeChild(li);
        break;
    }
}
а вообще:
var li = document.querySelector("ul li:first-child");
li.parentNode.removeChild(li);

OlegALL 21.05.2014 08:33

А зачем в цикле перебирать? Почему нельзя достичь элемента, примерно как я написал?

Octane 21.05.2014 08:40

Цитата:

Сообщение от OlegALL
А зачем в цикле перебирать? Почему нельзя достичь элемента, примерно как я написал?

Цитата:

Сообщение от OlegALL
mainObj.firstChild

Внутри mainObj первым может оказаться пустой текстовый узел.

OlegALL 21.05.2014 10:00

Спасибо!

OlegALL 21.05.2014 11:21

Помогите ещё преобразовать эти строки?

$("ul").append("<li><img src=''></li>");
$("ul").prepend("<li><img src=''></li>");

Aetae 21.05.2014 12:11

Цитата:

Сообщение от OlegALL (Сообщение 312721)
А зачем в цикле перебирать?

Цитата:

Сообщение от OlegALL
Нужен полный аналог


Цитата:

Сообщение от OlegALL (Сообщение 312721)
Почему нельзя достичь элемента, примерно как я написал?

Если же аналог нужен таки не полный, и у вас на странице гарантировано первым идёт нужный ul, то можно и как вы хотели:
var mainObj = document.getElementsByTagName("ul")*!*[0]*/!*.getElementsByTagName("li")[0];
mainObj.parentNode.removeChild(mainObj );

Цитата:

Сообщение от OlegALL (Сообщение 312736)
Помогите ещё преобразовать эти строки?
$("ul").append("<li><img src=''></li>");
$("ul").prepend("<li><img src=''></li>");

Нет. Вот вам учебник.

OlegALL 21.05.2014 12:52

При преобразовании

$("ul").append("<li><img src=''></li>");
$("ul").prepend("<li><img src=''></li>");


достаточно много кода получится?

Aetae 21.05.2014 13:05

Нет.

OlegALL 21.05.2014 13:35

document.querySelector("ul").innerHTML += "<li><img src=''></li>"; - так плохо? Для append(). Сейчас моргает моргает слайдер, с append() - нет. Моргает наверно из-за того, что динамически увеличивается узел ul.


Часовой пояс GMT +3, время: 02:25.