2012-05-11 2 views
0

HTML код

<li id="ioAddOtherRelation"> 
      <a href="" onclick="return ioAddSetOtherRelation()"class="smallLink">add other relation</a> 
</li> 

и я хочу, чтобы функция ioAddSetOtherRelation удалить тегJavascript удалить ребенок

Javascript код

function ioAddSetOtherRelation(){ 
    var bigLi = document.getElementById('ioAddOtherRelation'); 
    bigLi.removeChild(bigLi.childNodes[0]); 
    return false; 
} 

, когда я нажимаю ссылку в первый раз, ничего happend, но когда я нажимаю его дважды, он удаляет тег, я хочу удалить тег одним щелчком мыши

+0

Вы пытались установить дочерний элемент в переменную, а затем с помощью remove()? – atmd

+0

Да, я пробовал, и это то же самое –

ответ

2

Проблема с кодом вас в курсе, что первый ребенок вашего элемента «LI» фактически является текстовымNode, содержащим новую строку и пробел между собой и элементом 'a'. При первом нажатии этого невидимого текстового поля удаляется, а второй раз, когда вы нажимаете «a», удаляется.

Вы можете продемонстрировать это, удалив новую строку и пробел (т. Е. Поместите все HTML на одну строку без пробелов) - вы должны увидеть, что «a» исчезает при первом щелчке.

Я обнаружил, что следующий измененный javascript работал так, как вы планировали. Примечание. Я использовал .getElementsByTagName(), чтобы убедиться, что возвращаются только элементы 'a'. это вернет массив вроде .childNodes, поэтому я беру первый элемент результирующего массива.

  function ioAddSetOtherRelation() { 
      var bigLi = document.getElementById('ioAddOtherRelation'); 
      bigLi.removeChild(bigLi.getElementsByTagName("a")[0]); 
      return false; 
     } 

Я нашел FireBug быть очень полезным в решении этой проблемы (вместе с console.debug() строки в коде JS) - если вы не используете, что я рекомендовал бы дать ему идти!

+0

As Quentin и ranganadh отметил, что сам элемент «a» как параметр является гораздо более разумным подходом, чем попытка найти его, как я написал выше. – Jon

+0

спасибо, я заставляю меня понять решение, и он работает, как и сказал, я принимаю ур ответ, спасибо –

+1

Мое удовольствие, и спасибо за принятие моего ответа и получение моего отзыва с земли, чтобы я мог проголосовать за других, наконец, :-) – Jon

3

При первом щелчке вы удалили текстовый узел, содержащий пространство перед элементом. Вы должны убедиться, что аргумент, который вы передаете removeChild, является тем, который вы действительно хотите.

Это было бы разумнее подход к проблеме:

<li id="ioAddOtherRelation"> 
    <a href="" onclick="return ioAddSetOtherRelation(this)" class="smallLink">add other relation</a> 
</li> 

function ioAddSetOtherRelation(element){ 
    var bigLi = element.parentNode; 
    bigLi.removeChild(element); 
    return false; 
} 

Избавление от собственного атрибута события и писать unobtrusive JavaScript бы еще лучше.

+0

да, человек, он работает, спасибо, я согласен с ответом после 7 минут –

1

Используйте JQuery и отправить параметр, как this

Получай this в функции ioAddSetOtherRelation

Проверить это here

+0

всегда решение моих проблем использует jQuery :) спасибо –

Смежные вопросы