开发者问题收集

我该如何解决这个“无法读取 null 的属性‘appendChild’”错误?

2014-07-30
129350

我尝试使用下面的代码,在我的网站上的幻灯片中添加按钮:

window.onload = function loadContIcons() {
    var elem = document.createElement("img");
    elem.src = "http://arno.agnian.com/sites/all/themes/agnian/images/up.png";
    elem.setAttribute("class", "up_icon");

    var id = "views_slideshow_controls_text_next_slideshow-block";
    if (id !== 0) {
        document.getElementById(id).appendChild(elem);
    } else console.log("aaaaa");

    var elem1 = document.createElement("img");
    elem1.src = "http://arno.agnian.com/sites/all/themes/agnian/images/down.png";
    elem1.setAttribute("class", "down_icon");

    var id1 = "views_slideshow_controls_text_previous_slideshow-block";
    if (id1 !== 0) {
        document.getElementById(id1).appendChild(elem1);
    } else console.log("aaaaa");
}

在首页上,我有幻灯片,一切运行良好,但在其他页面上,出现错误 无法读取 null 的属性“appendChild”

3个回答

元素尚未附加,因此等于 null。Id 永远不会 = 0。当您调用 getElementById(id) 时,它为 null,因为它还不是 dom 的一部分,除非您的静态 id 已经在 DOM 上。通过控制台进行调用以查看它返回的内容。

eg_dac
2014-07-30

只需重新排序或确保(DOM 或 HTML)在 JavaScript 之前加载。

Arun Prasad E S
2017-10-23

您的条件 id !== 0 将始终不同于零,因为您分配的是字符串值。在未找到 id 为 views_slideshow_controls_text_next_slideshow-block 的元素的页面上,您仍将尝试附加 img 元素,这会导致 无法读取 null 的属性“appendChild” 错误。

您可以分配 DOM 元素并验证它是否存在于页面中,而不是分配字符串值。

window.onload = function loadContIcons() {
    var elem = document.createElement("img");
    elem.src = "http://arno.agnian.com/sites/all/themes/agnian/images/up.png";
    elem.setAttribute("class", "up_icon");

    var container = document.getElementById("views_slideshow_controls_text_next_slideshow-block");
    if (container !== null) {
        container.appendChild(elem);
    } else console.log("aaaaa");

    var elem1 = document.createElement("img");
    elem1.src = "http://arno.agnian.com/sites/all/themes/agnian/images/down.png";
    elem1.setAttribute("class", "down_icon");

    container = document.getElementById("views_slideshow_controls_text_previous_slideshow-block");
    if (container !== null) {
        container.appendChild(elem1);
    } else console.log("aaaaa");
}
Mike Vranckx
2014-07-30