Функция, которая добавляет разметку на страницу
Задача:
Создайте объект, описывающий html-разметку. Напишите функцию, которая добавляет разметку в произвольный контейнер на странице. разметка: <section id="methods"> <article> <h1>Array.prototype.every()</h1> <p>Метод every() проверяет, удовлетворяют ли все элементы массива условию, заданному в передаваемой функции.</p> </article> <article> <h1>Array.prototype.some()</h1> <p>Метод some() проверяет, удовлетворяет ли хоть какой-нибудь элемент массива условию, заданному в передаваемой функции.</p> </article> <article> <h1>Array.prototype.reduce()</h1> <p>Метод reduce() применяет функцию к аккумулятору и каждому значению массива (слева-направо), сводя его к одному значению.</p> </article> <article> <h1>Array.prototype.reduceRight()</h1> <p>Метод reduceRight() применяет функцию к аккумулятору и каждому значению массива (справа-налево), сводя его к одному значению.</p> </article> </section> мой js:
var tree={
tag:'section',
id: 'methods',//это атрибут тега section
children:{
children:{
tag: 'article',
children:{
tag: 'h1',
content: 'Array.prototype.every()',
},
children:{
tag: 'p',
content: 'Метод every() ...',
},
},
children:{
tag: 'article',
children:{
tag: 'h1',
content: 'Array.prototype.some()',
},
children:{
tag: 'p',
content: 'Метод some() ...',
},
},
},
}
function buildTree(tree, target) {
for (var key in tree) {
var item=tree[key];
var $tag = $('<' + item.tag + '>').appendTo(target);
if (item.children) {
buildTree(item.children, $tag);
};
if (item.content) {
$tag.text( item.content );
};
}
}
buildTree(tree, 'body');
мне на странице и в коде html выдает это: html:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>doc</title>
<script src="https://code.jquery.com/jquery-3.2.1.js"
integrity="sha256-DZAnKJ/6XZ9si04Hgrsxu/8s717jcIzLy3oi35EouyE="
crossorigin="anonymous"></script>
</head>
<body>
<script src="js/script.js"></script>
<undefined></undefined>
<undefined>
<undefined></undefined>
<p>Метод some() ...</p>
</undefined>
</body>
</html>
На странице отображается текст "Метод some() ...". Только последний тег р Помогите разобраться. Что я не так прописываю? |
Tanya51,
не бывает множества одинаковых ключей в обьекте, на одном уровне {children: {}, children: {}} можно только вложенные ключи одинаково назвать
{children: {children: {}}}
|
html из обьекта
Tanya51,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
var tree=[{
"tag": "SECTION",
"children": [{
"tag": "ARTICLE",
"children": [{
"content": "Array.prototype.every()",
"tag": "H1"
}, {
"content": "Метод every() проверяет, удовлетворяют ли все элементы массива условию, заданному в передаваемой функции.",
"tag": "P"
}]
}, {
"tag": "ARTICLE",
"children": [{
"content": "Array.prototype.some()",
"tag": "H1"
}, {
"content": "Метод some() проверяет, удовлетворяет ли хоть какой-нибудь элемент массива условию, заданному в передаваемой функции.",
"tag": "P"
}]
}, {
"tag": "ARTICLE",
"children": [{
"content": "Array.prototype.reduce()",
"tag": "H1"
}, {
"content": "Метод reduce() применяет функцию к аккумулятору и каждому значению массива (слева-направо), сводя его к одному значению.",
"tag": "P"
}]
}, {
"tag": "ARTICLE",
"children": [{
"content": "Array.prototype.reduceRight()",
"tag": "H1"
}, {
"content": "Метод reduceRight() применяет функцию к аккумулятору и каждому значению массива (справа-налево), сводя его к одному значению.",
"tag": "P"
}]
}]
}]
function buildTree(tree, target) {
tree.forEach(function(item) {
var $tag = $('<' + item.tag + '>').appendTo(target);
if (item.content) {
$tag.text(item.content);
};
if (item.children) {
buildTree(item.children, $tag);
};
})
}
$(function() {
buildTree(tree, 'body');
});
</script>
</head>
<body>
</body>
</html>
|
Спасибо. Теперь я поняла в чем дело.
Надо было делать перебор элементов, а я искала элемент. И не правильно написала структура обьекта) |
| Часовой пояс GMT +3, время: 05:40. |