2013-06-27 2 views
4

Мне нужно что-то вроде этого.Как удалить следующий элемент с помощью JavaScript (без использования jQuery)

<a onclick="SaveNote(this);" >Save</a> 
<a href="javascript:void(0);" id="112">Cancel</a> 
<a href="javascript:void(0);" id="112">Delete</a> 

Если я нажимаю на Save якоря, я хочу, чтобы удалить все три анкерных элементов, как показано выше, без использования каких-либо id, и заменить их на Edit якоря. В настоящее время у меня есть код Javascript, который выглядит примерно так:

function SaveNote(e){ 
    e.nextSibling.removeNode; 
    e.nextSibling.removeNode; 
    e.nextSibling.removeNode; 
} 

У вас есть идеи по поводу этой проблемы?

+0

removeNode правописание неверно, и его следует удалитьNode(), поскольку это функция –

ответ

1

Вы могли бы сделать что-то вроде этого

HTML

<div>Stuff before</div> 
<div> 
    <a id="save" href="#">Save</a> 
    <a id="cancel" href="#">Cancel</a> 
    <a id="delete" href="#">Delete</a> 
</div> 
<div>Stuff after</div> 

Javascript

function emptyNode(node) { 
    while (node.firstChild) { 
     node.removeChild(node.firstChild); 
    } 
} 

function saveNote(e) { 
    var parent = e.target.parentNode, 
     edit = document.createElement("a"); 

    emptyNode(parent); 

    edit.id = "edit"; 
    edit.href = "#"; 
    edit.appendChild(document.createTextNode("Edit")); 
    parent.appendChild(edit); 
} 

document.getElementById("save").addEventListener("click", saveNote, false); 

На jsfiddle

Примечание: это требует поддержки addEventListener, который легко расправился с

+0

Спасибо, но нам нужно также удалить кнопку «сохранить» и добавить еще одну кнопку «как изменить». – aman

+0

Это очень легко добавить в 'saveNote', но не в исходном вопросе. – Xotic750

+0

Да, я знаю, но нам нужно это Спасибо – aman

10

removeNode похоже не стандарт. Попробуйте это:

if(e && e.nextSibling) { 
    e.parentNode.removeChild(e.nextSibling) 
} 
2

Вместо reomveNode попробовать removeNode();.

+0

спасибо, заклинание исправлено, но все еще не работает – aman

+0

Спасибо всем, кто потратит ваше драгоценное время на мою проблему. Я придумал решение while (e && e.nextSibling) { e.parentNode.removeChild (e.nextSibling); } e.parentNode.removeChild (e); – aman

2

Я хотел сделать то же самое, что и этот вопрос, но не ссылаясь на родительский узел. После некоторых поисковых запросов это то, что я нашел!

Похоже, что есть функция, которая позволит вам сделать это без ссылки на родительский узел; он называется remove();.

Демоверсия.

function removeNextNode(elem) { 
 
    elem.nextElementSibling.remove(); 
 
}
a { 
 
    display: block; 
 
}
<a onclick="removeNextNode(this);" href="#">Click to remove the next node...</a> 
 
<a href="#">another node</a> 
 
<a href="#">another node</a> 
 
<a href="#">another node</a> 
 
<a href="#">another node</a> 
 
<a href="#">another node</a> 
 
<a href="#">another node</a>

Пожалуйста оставить комментарий, если этот ответ может быть улучшена.

+0

Это не так, как IE не поддерживает его, см. [MDN] (https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove) –