|
|
|
| Добрый вечер уважаемые форумчане. Подскажите почему именно из элемента p невозможно получить дочерние узлы при помощи свойства childNodes | |
|
|
|
|
|
|
|
для: OlegBas
(06.12.2013 в 21:36)
| | А что именно вы хотите получить? childNodes - это массив объектов узлов текущего элемента и включает в себя не только объекты элементы, но текстовые узлы. Браузер может воспринимать пробелы, символы разрыва строк как текстовые узлы, что в свою очередь будет влиять на свойства firstChild, lastChild этого набора. | |
|
|
|
|
 151.7 Кб |
|
|
для: confirm
(06.12.2013 в 23:36)
| | Я хочу получить дочерние узлы находящиеся в элементе p.Посмотрите пожалуйста скрин во вложении (в 1 скрине я показываю как я получаю дочерние узлы , а во втором сам html) | |
|
|
|
|
 142.4 Кб |
|
|
для: OlegBas
(07.12.2013 в 10:45)
| | Это второй скрин(смотрите во вложении) | |
|
|
|
|
|
|
|
для: OlegBas
(07.12.2013 в 10:50)
| | Во-первых - метод getElementsByClassName, это метод из черновика HTML5, а значит просто не будет работать в зависимости от браузера.
Во-вторых в html коде представленном элементов с классом 'div' не наблюдается, видимо вы путаете имя тега с классом.
Если знаете, что в элементе необходимо получить дочерние узлы и только div, то это можно сделать методом getElementsByTagName('div').
В третьих, у вас используется jQuery, а значит ваша комбинация совсем никчемна, в jQuery получить дочерние элементы (не узлы!), это:
$(селектор).children([селектор])
|
А для того чтобы с помощью childNodes получить нужное, необходимо в цикле проверкой типа узла забирать необходимое. | |
|
|
|
|
 153.7 Кб |
|
|
для: confirm
(07.12.2013 в 11:04)
| | Я немного запутал вас.Я хочу получить дочерние узлы элементов с классом block , а не по имени тега/.Также я переписал код на стиль XHTML 1.1 . так как вы говорите , что свойство getElementsByClassName() не поддерживается в HTML 5 Но все равно из элемента p , который оказывается в выборке с индексом 1 не удается получить дочерний узлы ,там один только objectText и все , а из div спокойно можно получить .Посмотрите пожалуйста на скрин | |
|
|
|
|
|
|
|
для: OlegBas
(07.12.2013 в 17:59)
| | Вместо картинок ненужных выставляйте свой код, обрамив его тегами code.
Я вам уже написал как получить дочерние элементы с помощью jQuery:
В методе children() можно указывать и селектор уточняющий, например, если ваш параграф содержал бы кроме тегов h3, и другие теги, а нужны были бы только заголовки, то нужно было бы написать так:
$('p.block').children('h3');
|
Что не понятного? | |
|
|
|
|
|
|
|
для: confirm
(07.12.2013 в 18:18)
| | На jQuery конечно все понятно , я хотел это сделать на чистом JavaScript | |
|
|
|
|
|
|
|
для: OlegBas
(07.12.2013 в 20:14)
| | На чистом JS (хотя jQuery, это не "грязный JS", а библиотека функций и методов JS), нужно поступать также как и jQuery делала бы - получаете все элементы, в цикле перебирая их, проверяете имя класса, найдя нужный получаете его узлы (childNodes), в цикле проверяете тип полученных узлов (nodeType), и если возвращается 1, то это узел элемента - делайте с ним чего вам надо. | |
|
|
|
|
|
|
|
для: confirm
(07.12.2013 в 21:05)
| | Все логично, что вы говорите с элементом div , но с элементов p так не получается .Если запросить у него дочерние узлы ,то сколько бы узлов (в реальности) элемент p не содержал , возвращается только один objectText и нечего больше .ВОТ В ЧЕМ ЗАКЛЮЧАЕТСЯ ВСЯ ПРОБЛЕМА!!!.Продемонстрирую еще раз код
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Тестовая страница</title>
<script type = "text/javascript" src = "lib/func.js"></script>
</head>
<body>
<div class = "block">
<span>Блочный элемент span</span>
</div>
<p class = "block">
<h3>Заголовок 3 уровня</h3>
<h3>Заголовок 3 уровня</h3>
</p>
<script type = "text/javascript">
var elements = document.getElementsByClassName("block");//Получаем все элементы с классом block
var childrens_0 = elements[0].childNodes;
var childrens_1 = elements[1].childNodes;
alert(childrens_0.length); //Выводит 3 элемента (правильно)
alert(childrens_1.length); //Выводит 1 элемента почему?
</script>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: OlegBas
(08.12.2013 в 11:14)
| | Вы сами то понимаете что пишите?
Во-первых, document.getElementsByClassName("block") - это равноценно использованию jQuery, ибо выбор по селектору доступен только в новых браузерах.
Во-вторых, вы или не понимаете смысла childNodes, или не читаете то, что вам пишут.
<script>
onload = function() {
var elm = document.getElementById('as').childNodes;
for(i=0, k=elm.length; i<k; i++) {
alert(elm[i].nodeType);
if(elm[i].nodeType==1) alert(elm[i].innerHTML);
}
}
</script>
<p id="as">
<span>Element 1</span>
<span>Element 2</span>
</p>
|
Показывает типы узлов? Показывает содержимое элемента, если узел это элемент? | |
|
|
|