删除加载时由javascript创建的元素

时间:2009-11-17 14:10:35

标签: javascript

如何删除javascript创建的元素,我尝试使用css设置display:none;但这似乎没有解决我的问题,我也无法删除它们,因为我没有HTML,任何其他方式?谢谢

更新:

不能使用任何javascript,例如jquery,mootools,extjs等,我要删除的实际元素是div,指定的类,所以我不能使用getElementById。

我在谷歌上发现了这个脚本,但它似乎没有用,但这就是我需要的:

HERE

7 个答案:

答案 0 :(得分:1)

使用jQuery执行此操作非常简单。

$("#myId").remove();

将删除

<div id="myId"></div>

编辑:您也可以使用"old school" javascript

您正在寻找的功能是removeChild()

示例:

function removeElement(divNum) {
  var d = document.getElementById('myDiv');
  var olddiv = document.getElementById(divNum);
  d.removeChild(olddiv);
}

答案 1 :(得分:0)

您可能需要更加具体。

一般答案是“使用Javascript”。只要您有通过DOM导航到元素的方法,就可以将其从DOM中删除。

如果你可以使用像jQuery或原型这样的库,那就容易多了,但是你可以用Javascript做些什么。

marcgg假设你知道元素的ID:如果你不知道但是可以在DOM结构中跟踪它,你可以做这样的事情(在原型中 - 不知道jQuery)

var css_selector ='table #fred tr td span.mydata';

$$(CSS).invoke( '删除');

如果你不能使用JS库,你必须自己使用Element.getElementsByTagName()进行DOM导航。

现在您已经指定了一些问题:使用Element.getElementsByTagName,并循环查看它们的className属性。

答案 2 :(得分:0)

您可能需要这样的东西来利用浏览器支持:

if(document.getElementsByClassName){
    // Safari 3+ and Firefox 3+
    var itms = document.getElementsByClassName('your_class');
    for(var i = 0; i<itms.length; i++){
        var it = itms[i];
        if(it.tagName == "DIV"){
            it.parentNode.removeChild(it);
            i = i - 1; //It actually gets removed from the array, so we need to drop our count
        }

    }
} else {
    // All other browsers
    var itms = document.getElementsByTagName('div');
    for(var i = 0; i<itms.length; i++){
        var it = itms[i];
                              // Test that className contains your class
        if(/your_class/.test(it.className)) it.parentNode.removeChild(it);
    }
}

答案 3 :(得分:0)

JavaScript使用垃圾收集处理所有内存管理,因此一旦对对象的所有引用都不复存在,该对象将由浏览器特定的实现处理。

如果您拥有dom元素:

if(node && node.parentNode){
    // return a ref to the removed child
    node.parentNode.removeChild(node);
}

答案 4 :(得分:0)

既然你说你不能使用Javascript,你就会陷入困境。你试过这个CSS:

.classname {
  display: none !important;
}

创建的元素可能在其上设置了内联样式,在这种情况下,会覆盖普通的CSS。我相信!important会覆盖内联样式。

当然,最好的解决方案不是首先添加元素......但我猜你在其中一个(不可思议的常见)场景中你无法改变或摆脱JS?

答案 5 :(得分:0)

  

并非所有浏览器都有   document.getElementsByClassName   方法,但为了您的目的,你可以   把它弄得很好 - 这种方法可以   不像本地人那样工作   HTMLElement.getElementsByClassName-它   返回一个数组,而不是一个实时节点列表。   您可以指定父元素和   标签名称以加快速度。

function getElementsByClass(css, pa, tag){
    pa= pa || document.body;
    tag= tag || '*';
    css= RegExp('\\b'+css+'\\b');
    var A= [], elements, L, i= 0, tem;
    elements= pa.getElementsByTagName(tag);
    L= elements.length;
    while(i<L){
        tem= elements[i++];
        if(css.test(tem.className)) A[A.length]= tem;
    }
    return A;
}

//测试

var A= getElementsByClass('removeClass'), who;
while(A.length){
    who= A.pop(); // remove from the end first, in case nested items also have the class
    if(who.parentNode) who.parentNode.removeChild(who);
    who= null;
}
  

如果您已分配事件处理程序   要删除的元素,你应该   在删除之前删除处理程序   元件。

答案 6 :(得分:-2)

使用:

document.removeChild('id_of_element');