У меня будет скрипт, в котором все дочерние элементы из HTML-поддерева будут текстовыми. Я написал sth, но это не wokr для любого узла
$(document).ready(function () {
var result;
$.each($("li").contents(), function(i, v){
if(v.nodeType == 3){
result = result + " " + v.nodeValue;
}
});
alert(result);
});
Попробуй это:
$(document).ready(function () {
var result = "";
$("li").each(function() {
result += $(this).text();
});
alert(result);
});
Вам нужно инициализировать result
для пустой строки:
var result = '';
Если нет, result
инициализируется undefined
и
undefined + 'someString' === 'undefinedsomeString'
В ES6 я считаю, что это более читаемо:
var result = [].slice.call($("li").contents())
.filter(v => v.nodeType == 3)
.map(v => v.nodeValue)
.join(' ');
alert(result);
В ES5 это более подробный:
var result = [].slice.call($("li").contents())
.filter(function(v){ return v.nodeType == 3; })
.map(function(v){ return v.nodeValue; })
.join(' ');
alert(result);