Отображение содержимого текстового узла
такой вопрос. Есть текстовый узел, комментарий в кода. Получаю к нему доступ с помощью childNodes. Но при попытке вычитки содержимого, получаю пустую строку. А мне нужен текст самого комментария. Пробывал вычитывать с помощью data, nodeValue и т.п. не помагает - все равно пустая строка. Мож кто сталкивался с подобным, хэлп плиз.
|
<body><!-- comment text --> <script> var comment = document.body.firstChild; alert(comment.data); </script> |
danik спасибо за помощь но у меня во всех браузерах выводится пустая строка без ничего. Причём я коммент пишу сразу после body и обращаюсь как ты написал firstChild. вообще не пойму что не так.
|
kos403, я думаю на тебе лежит проклятие. Это единственное объяснение, которое можно дать не увидив код.
|
Цитата:
|
Да нет всё ок, я уже понял, у меня просто комментарий был написан через пробел от body а пробел это ведь тоже текстовый узел. Вот почему была пустая строка. С кодом всё норм.Вот пример.
danik - но все равно спасибо большое!)) this.show_Comment = function(){ var mass_of_all_nodes = 0; var length_of_the_collection_of_node = 0; mass_of_all_nodes = document.body.childNodes; length_of_the_collection_of_node = mass_of_all_nodes.length; end : { for(var i = 0;i < length_of_the_collection_of_node;i++){ if(mass_of_all_nodes[i].nodeType == 3){ if(mass_of_all_nodes[i].data.indexOf('<!-- js') != '-1' || mass_of_all_nodes[i].nodeValue.indexOf('<!-- js') != '-1'){ var from_where = 0; var when_stopd = 0; var string_of_data = ''; from_where = mass_of_all_nodes[i].data.indexOf(':'); when_stopd = mass_of_all_nodes[i].data.indexOf('>'); for(var j = from_where;j < when_stopd;j++){ string_of_data += mass_of_all_nodes[i].data.charAt(j); } break end; } } } alert('Nothing'); } } ; } |
Кстати спрошу раз уж на то пошло, а как вывести содержимое комментария находящего между body и head. Насколько я знаю между ними никаких текстовых узлов не создаётся. Но у меня коммент именно там расположен и мне нужно его вывести, может кто сталкивался, подскажите плиз!
выглядит примерно так </style> </head> <!-- js: parse JS Code --> <body> |
kos403, ты с какой планеты? Во-первых, для кода на форуме есть спец-цеги, во-вторых, че за именование с подчеркиваниями и такие длинные имена? Где ты такое увидил? В-третьих, нафига метка end?
В-четвертых, для какого браузера у тебя .nodeValue используется? |
А все понял как между head и body найти нужно использовать document.documentElement - возвратит ссылку на документ html :dance:
Цитата:
Цитата:
зируют скрипт, но это уже для компа, а человеку так легче визуально представить информация. Цитата:
|
danik помоги пожалуйста с моим предыдущим вопросом,я оставлял на счёт IFrame, очень нужно плиз.
|
Цитата:
|
this.show_Comment = function(from, to){
var mass_of_all_nodes = 0;
var length_of_the_collection_of_node = 0;
mass_of_all_nodes = document.body.childNodes;
length_of_the_collection_of_node = mass_of_all_nodes.length;
for(var i = 0;i < length_of_the_collection_of_node;i++){
if(mass_of_all_nodes[i].nodeType == 8 && mass_of_all_nodes[i].nodeName == "#comment"){
if(mass_of_all_nodes[i].data.indexOf(from) != '-1' || mass_of_all_nodes[i].nodeValue.indexOf(from) != '-1'){
var from_where = 0;
var when_stopd = 0;
var string_of_data = '';
from_where = mass_of_all_nodes[i].data.indexOf(from);
when_stopd = (mass_of_all_nodes[i].data.indexOf(to) + 3);
for(var j = from_where;j < when_stopd;j++){
string_of_data += mass_of_all_nodes[i].data.charAt(j);
}
alert(string_of_data + ' was found in body');
return;
}
}
}
}
Конечная функция получилась вот такой! где я такое увидел, да видел у некоторых прогеров, которые на С писали, но сам думаю что так и себе понятней и человеку который будет после тебя. С какой я планеты, да вроде с этой, хотя хз ;) |
ну а метка там нужны была для того, что бы если функция успешно завершилась, то есть нашла строку - программа обходила блок с сообщением что ничего не найдено.
|
Соблюдать надо правила именования того языка, на котором ты пишешь, а не который ты где-то когда-то видел. Тем более если твой код увидит кто-то кроме тебя.
Зачем ты инициализируешь переменные сначала нулями, а потом тутже присваиваешь им новые значения? Опять же я не понял про nodeValue и nodeName. Если доступаешься к элементу массива много раз, то почему бы не вынести элемент в переменную? А вот это: Цитата:
Вложенные if'ы - тоже зло. В каком-то проекте крупном, не помню, даже патч не примут если есть три вложенных if'a. Вот мой вариант (примерно так же напишет любой js-прогер с планеты земля):
this.showComment = function(prefix, suffix) {
var nodes = document.body.childNodes;
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
if (node.nodeType !== node.COMMENT_NODE)
continue;
var prefixIndex = node.data.indexOf(prefix);
if (prefixIndex < 0)
continue;
var suffixIndex = node.data.indexOf(suffix);
var data = node.data.substring(prefixIndex, suffixIndex + 3);
return alert(data + ' was found in body');
}
};
Чей на твой взгляд читабельней? nodes.length не вижу смысла кэшировать. Если нужна поддержка IE8, то тебе придется самому определить константу COMMENT_NODE. Откуда число + 3? Че за магия? |
danik.js danik спасибо буду мотать на ус, ещё многому предстоит научиться)
|
| Часовой пояс GMT +3, время: 17:35. |