1

以下代码

var descriptdiv = document.createElement("div");
document.body.lastChild.appendChild(descriptdiv);

适用于 IE,但不适用于 FireFox 和 Chrome。我怎样才能让它在这些浏览器中也能工作?

4

2 回答 2

1

您最有可能看到的是 Firefox/Chrome 将文本节点返回为lastChild. 这是因为这些浏览器将在代码末尾返回任何空格/换行符作为文本节点。由于您不能将 div 附加到文本节点,因此代码将失败。

另一方面,IE 将忽略空格/换行符并返回最后一个元素,您可以成功附加到该元素。您可以使用如下函数来获取最后一个元素:

function getLastChild(n) {    
    var x = n.lastChild;

    // noteType == 1 is an element node - keep searching until we find one
    while (x && x.nodeType != 1){
      x = x.previousSibling;
    }

    // don't allow a non element node to be returned.
    if(x && x.nodeType != 1){
      x = null;
    }
    return x;    
}
于 2011-09-24T02:37:53.267 回答
0

您不能将块元素添加到 img、br、hr 和许多其他元素中,并且您可以添加一些您永远不需要的元素。

您可能对所需的容器有所了解。

function addaBlocktothelastChild(block, rx){
    var next, elements= document.body.getElementsByTagName('*'),
    L= elements.length, count= L;
    rx= rx ||  /^(DIV|P|TD|LI|DT|DD)$/i;
    while(L && !rx.test(elements[--L].tagName));
    if(L>= 0){
        return elements[L].appendChild(block);
    }
    return document.body.appendChild(block);
}



var block= document.createElement('div');
block.id= 'Zed';
addaBlocktothelastChild(block);
alert(document.getElementById('Zed').parentNode)

/^(DIV|P|TD|LI|DT|DD|BLOCKQUOTE|表格|文章|旁白|页脚|标题|导航|节)/i

于 2011-09-24T03:30:52.853 回答