|
|
|
| Возникла задача - нужно удалить узел без удаления потомков этого узла. Подскажите - в каком направлении копать: писать парсер, или как то через DOM попробовать. | |
|
|
|
|
|
|
|
для: вялый
(11.01.2008 в 22:19)
| | DOM поможет, если xml валидный. Хотя бы тот кусок, который вас интересует. То есть, теги <p> закрыты, к примеру.
Я бы просто взял нужный элемент, вытащил из него содержимое innerHTML, нашел его родителя, удалил нужный элемент, вставил в родителя innerHTML. | |
|
|
|
|
|
|
|
для: SHAman
(11.01.2008 в 22:51)
| | this.removeNode(false) можно на некоторых | |
|
|
|
|
|
|
|
для: bronenos
(11.01.2008 в 23:22)
| | Погуглю насчет этого метода, спасибо | |
|
|
|
|
|
|
|
для: bronenos
(11.01.2008 в 23:22)
| | Случайно не подскажите хорошие ресурсы по dhtml и DOM в частности? Порекомендуйте что нибудь | |
|
|
|
|
|
|
|
для: SHAman
(11.01.2008 в 22:51)
| | Наверно, немножко не то. Хочу сделать простенький WYSWYG редактор, и в этом редакторе функцию удаления элементов, например
<div>
<div> //напрмер, удалить этот узел
<p>asdfkjsdlkjflsajdlfkj</p>
<img src="">
</div>
<p>sadfsadfsadfasdf</p>
</div>
|
Но при использовании метода innerHTML данные добавляются в конец узла, а мне это не подходит, т.к. нарушится порядок следования элементов.
Наверное, я так думаю, проще будет написать парсер. | |
|
|
|
|
|
|
|
для: вялый
(11.01.2008 в 23:28)
| | >Но при использовании метода innerHTML данные добавляются в конец узла, а мне это не подходит
SHAman
>Я бы просто взял нужный элемент, вытащил из него содержимое innerHTML, нашел его родителя, удалил нужный элемент, вставил в родителя innerHTML.
<html>
<head>
<title>Ex</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="javascript">
function d(sCont, sDel) {
var oContainer = document.getElementById(sCont);
var sContent = oContainer.innerHTML;
var oEltoDel = document.getElementById(sDel);
var sNeedContent = oEltoDel.innerHTML;
var sTag = oEltoDel.tagName;
var oElreg = new RegExp("<"+ sTag + ' id\="?' + sDel + '"?>\\s*' + sNeedContent + "\\s*<\/" + sTag + ">", 'mi');
oContainer.innerHTML = sContent.replace(oElreg, sNeedContent);
alert('Before: ' + sContent + ' \n\n\n After: ' + oContainer.innerHTML);
}
</script>
</head>
<body>
<div id="container">
<div id='del'> //напрмер, удалить этот узел
<p>asdfkjsdlkjflsajdlfkj</p>
<img src="">
</div>
<p>sadfsadfsadfasdf</p>
</div>
<input type="button" value="Show" onClick="d('container', 'del')" />
</body>
</html>
|
что-то вроде, без парсера...
уже к своим целям прилатаешь | |
|
|
|
|
|
|
|
для: patience
(12.01.2008 в 17:11)
| | Метод removeNode(false) как раз то, что нужно. | |
|
|
|
|
|
|
|
для: вялый
(11.01.2008 в 22:19)
| | Положим, ваш УЗЕЛ имеет id="myUZEL".
В Эксплорере задача решается на "раз-два-три":
var UZEL = document.all.myUZEL;
var PAPA = UZEL.parentElement;
PAPA.innerHTML = PAPA.innerHTML.split (UZEL.outerHTML).join (UZEL.innerHТML);
|
В прочих браузерах задачка эта решается чуть-чуть посложнее (ибо никто, кроме Эксплорера, не поддерживает outerHTML).
Но, полагаю, если поймёте суть вышенаписанного, то без труда сделаете код кроссбраузерным. | |
|
|
|
|
|
|
|
для: вялый
(11.01.2008 в 22:19)
| | Вот код:
function f(x){
var b=document.getElementById("id"+x);
if(b.removeNode)b.removeNode(false);
else
{var child=b.childNodes;
var childIns=b.parentNode.insertBefore(child[0],b.previousSibling)
while(child[0])
{
childIns=b.parentNode.insertBefore(child[0],childIns)
}
}
}
|
тут потомки удаляемого узла добавляются родителю перебором: я не смог найти метода для добавления сразу всего списка childNodes родителю
Может, кто-то знает более элегантное решение? поделитесь | |
|
|
|