Javascript removeChild массив - PullRequest
       45

Javascript removeChild массив

0 голосов
/ 15 марта 2011

это выглядит достаточно просто, но я просто не могу заставить его работать. Я мог бы добавить элементы DOM, но я просто не могу удалить их при использовании массива.

<script language="javascript">
fields = 0;
count = 0;
function addInput() {
  if (fields != 10) {
      var htmlText =  "<input type='search' value='' name='field[]' />";
      var remButton = "<input type='button' value='del' onclick='remove()' />";
      var newElement = document.createElement('div');

      newElement.id = 'SomeID'+fields; 
      newElement.innerHTML = htmlText + remButton + newElement.id;

      var fieldsArea = document.getElementById('text');
      fieldsArea.appendChild(newElement);

      fields += 1;
  } else {
     ...
  }
count++;
}

// NEED HELP FROM HERE PLEASE
// You don't need to Loop, just get the button's id and remove that entire 'SomeID'


function remove() {
  fieldsArea = document.getElementById('text');


  fieldsArea.removeChild(SomeID1);   <-----------------------THIS WORKS!
  fieldsArea.removeChild(SomeID+count); <------------------THIS JUST WOULDN'T

  count--;
}
</script>

В функции удаления написание SomeID1 работает и удаляет первый добавленный элемент, но когда я пытаюсь использовать 'count', я просто не могу удалить свои 'элементы'.

Любая помощь будет наиболее ценной.

Спасибо!

Ответы [ 2 ]

1 голос
/ 15 марта 2011

Сначала вы должны получить ссылку на элемент. В настоящее время вы передаете неопределенную переменную SomeID в функцию.

например:.

var element = document.getElementById('SomeID' + fields);
// or starting by zero: var element = document.getElementById('SomeID0');
element.parentNode.removeChild(element);

Если вы хотите удалить div, для которого была нажата кнопка, вы должны передать ссылку на соответствующий div в функцию remove.

'<input type="button" value="del" onclick="remove(this.parentNode)" />';

this будет относиться к кнопке и, поскольку она является дочерней по отношению к div, this.parentNode относится к этому div.

Вы также должны изменить свою функцию, чтобы принять элемент, который должен быть удален:

function remove(element) {
  element.parentNode.removeChild(element);   
  count--;
}

Возможно, вам также нужно обновить fields, но я не уверен, как должен работать ваш код.


Если вы хотите удалить все из них, вы должны выполнить цикл:

for(;fields--;) {
   var element = document.getElementById('SomeID' + fields);
   element.parentNode.removeChild(element);
}

Также взгляните на документацию removeChild.

1 голос
/ 15 марта 2011

removeChild нужен узел (элемент DOM) в качестве параметра.В этом случае

fieldsArea.removeChild(SomeID+count);

вы можете, например, передать узел таким образом

fieldsArea.removeChild(document.getElementById('SomeID'+count));
...