Как заменить узел в маркированном списке?
Прочитал про узлы на сайте Javascript.ru
node.append(...nodes or strings) – добавляет узлы или строки в конец node,
node.prepend(...nodes or strings) – вставляет узлы или строки в начало node,
node.before(...nodes or strings) –- вставляет узлы или строки до node,
node.after(...nodes or strings) –- вставляет узлы или строки после node,
node.replaceWith(...nodes or strings) –- заменяет node заданными узлами или строками.
Нет примера как воспользоваться этим узлом node.replaceWith К примеру есть маркированный список,
<ul id="list1">
<li>Кофе</li>
<li>Чай</li></ul>
<li>Кола</li></ul>
<li>Виски</li></ul>
<li>Коньяк</li></ul>
Как именно сделать замену элемента узла, а не вставку в конец или вначало. Например третий элемент Кола поменять на Водка? |
denis_alekss,
чем вставка не угодила? вставили новое, удалили старое или переписали parent.replaceChild(newElem, node) |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Название документа</title>
</head>
<body>
<ul id="list1">
<li>Кофе</li>
<li>Чай</li>
<li>Кола</li>
<li>Виски</li>
<li>Коньяк</li></ul>
<ul id="list2"><li>Вода</li><li id="item2">Молоко</li></ul>
<p>Нажмите кнопку, чтобы переместить последний элемент списка</p>
<button onclick="foo()">Переместить</button>
<script>
var i = 1;
function foo() {
var elem = document.getElementById("list2").elem[2];
parent.replaceChild("Водка",elem[2])
}
</script>
</body>
</html>
Что-то не заменяется |
denis_alekss,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<ul id="list1">
<li>Кофе</li>
<li>Чай</li>
<li>Кола</li>
<li>Виски</li>
<li>Коньяк</li>
</ul>
<script>
let li = document.querySelector('#list1 :nth-child(3)')
li.insertAdjacentHTML('afterend', '<li>Водка</li>');
li.remove()
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<ul id="list1">
<li>Кофе</li>
<li>Чай</li>
<li>Кола</li>
<li>Виски</li>
<li>Коньяк</li>
</ul>
<script>
let li = document.querySelector('#list1 :nth-child(3)');
let f = document.createElement('li');
f.append('Водка');
li.replaceWith(f);
</script>
</body>
</html>
|
Цитата:
|
denis_alekss,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<ul id="list1">
<li>Кофе</li>
<li>Чай</li>
<li>Кола</li>
<li>Виски</li>
<li>Коньяк</li>
</ul>
<script>
let elem = document.querySelectorAll('#list1 > li');
let f = document.createElement('li');
f.textContent = 'Водка';
elem[2].parentNode.replaceChild(f , elem[2])
</script>
</body>
</html>
|
У вас какие-то новіе функции вижу, вместо innerHTML используете метод textContent, вместо getElementById используете querySelectorAll? Они работают одинаково?
Попробовал так, но вроде слышал это плохой тон, нужно выполнять поиск элементов в списке.
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<ul id="list1">
<li>Кофе</li>
<li>Чай</li>
<li>Кола</li>
<li>Виски</li>
<li>Коньяк</li>
</ul>
<input type="button" onClick="freplace()" value="Замена элемента">
<script>
function freplace(){
let change = document.createElement('li');
change.innerHTML = 'Заменено';
list1.children[2].replaceWith(change);
}
</script>
</body>
</html>
|
Цитата:
https://learn.javascript.ru/modifying-document https://learn.javascript.ru/searching-elements-dom |
При вставке html есть метод insertAdjacentHTML
А как сделать так чтобы произошла замена элемента списка вставкой HTML и одновременно он стал элементом списка? Я пробую стилями но они не работают. Строка ul.city{list-style-type:circle;} не срабатывает
<!DOCTYPE html>
<html>
<head>
<title>Тест</title>
<meta charset="utf-8">
<style type='text/css'>
ul.city{list-style-type:circle;}
.city {color:brown; font-size:18pt;
margin:0; padding:0;
}
</style>
</head>
<body>
<ul id="list1">
<li>Кофе</li>
<li>Чай</li>
<li>Кола</li>
<li>Виски</li>
<li>Коньяк</li>
</ul>
<div id="div"></div>
<script>
let sos = document.querySelector('#list1 :nth-child(4)');
sos.insertAdjacentHTML('afterEnd','<p class="city">Привет</p>');
sos.remove();
</script>
</body>
</html>
|
denis_alekss,
строка 7 и 24 здесь, ищите разницу с вашим кодом.
<!DOCTYPE html>
<html>
<head>
<title>Тест</title>
<meta charset="utf-8">
<style type='text/css'>
ul .city{list-style-type:circle;}
.city {color:brown; font-size:18pt;
margin:0; padding:0;
}
</style>
</head>
<body>
<ul id="list1">
<li>Кофе</li>
<li>Чай</li>
<li>Кола</li>
<li>Виски</li>
<li>Коньяк</li>
</ul>
<div id="div"></div>
<script>
let sos = document.querySelector('#list1 :nth-child(4)');
sos.insertAdjacentHTML('afterEnd','<li class="city">Привет</li>');
sos.remove();
</script>
</body>
</html>
|
Тьфу, вот это лоханулся, вместо тега p, нужно li было поставить. Мне понравилась ваша фишка nth-child
он проходит по элементам, как будто по массиву |
Цитата:
|
| Часовой пояс GMT +3, время: 13:01. |