Удалить несколько элементов с одинаковым именем, используя removeChild - PullRequest
0 голосов
/ 23 июля 2011

У меня есть элементы с несколькими элементами внутри. Все элементы внутри имеют одинаковое имя. Есть ли где-нибудь, чтобы убрать все функции?

(см. Этот вопрос, например Удалить нескольких детей из родительского?

Ответы [ 3 ]

2 голосов
/ 23 июля 2011

Вот решение, которое удаляет дочерние элементы первого уровня с указанным именем для родителя с указанным идентификатором. Если вы хотите пойти глубже, вы можете рекурсивно вызвать его для дочерних элементов, которые вы попадаете внутрь (вам также нужно добавить параметр parent).

function removeChildren (params){
    var parentId = params.parentId;
    var childName = params.childName;

    var childNodes = document.getElementById(parentId).childNodes;
    for(var i=childNodes.length-1;i >= 0;i--){
        var childNode = childNodes[i];
        if(childNode.name == 'foo'){
            childNode.parentNode.removeChild(childNode);
        }
    }
}

И назвать это:

removeChildren({parentId:'div1',childName:'foo'});

и скрипка для тестирования:

Примечания. Вы можете получить доступ к элементу имени только в JavaScript, если он поддерживается вашим элементом (например, НЕ в DIV!). Смотри здесь почему.

UPDATE:

Здесь - решение с использованием className, основанное на нашем разговоре:

function removeChildren (params){
    var parentId = params.parentId;
    var childName = params.childName;

    var childNodesToRemove = document.getElementById(parentId).getElementsByClassName('foo');
    for(var i=childNodesToRemove.length-1;i >= 0;i--){
        var childNode = childNodesToRemove[i];
        childNode.parentNode.removeChild(childNode);
    }
}
0 голосов
/ 23 июля 2011

хорошо, это должно быть легко. Сначала получите родительский элемент:

var theParent = document.getElementById("notSoHappyFather");

затем получите массив узлов, которые вы хотите удалить:

var theChildren = theParent.getElementsByName("unluckyChild");

Наконец, удалите их с помощью цикла:

for (var i = 0; i < theChildren.length; i++)
{
  theParent.removeChild(theChildren[i]);
}
0 голосов
/ 23 июля 2011

Образец вашего HTML даст вам более полный ответ, но можно довольно легко вызвать функции DOM, чтобы получить список детей и просто удалить их.В jQuery удалить все дочерние элементы можно примерно так:

$("#target > *").remove();

или

 $("#target").html("");

И вы можете увидеть демо здесь: http://jsfiddle.net/jfriend00/ZBYCh/

Или, не используя jQuery, вы также можете сделать:

document.getElementById("target").innerHTML = "";

Если вы пытаетесь удалить только подмножество дочерних элементов (и оставить остальные нетронутыми), то вам нужно быть более конкретным, как определить, какиедетей оставить и что убрать.В jQuery вы можете использовать селектор .find () или селектор filter (), чтобы сузить список дочерних элементов до тех, которые вы хотите выбрать для удаления.

...