来自书忍者javascript的javascript练习

时间:2014-04-13 14:06:30

标签: javascript html dom

这是本书之一(Ninja javascript)的例子。

我不确定为什么控制台会继续抱怨它无法附加到null ..

        document.getElementById("results").appendChild(li);

是我看到错误的地方..我做错了什么?

整个代码如下:

            <body>
    this.assert = function assert(value, desc) {
        var li = document.createElement("li");
        li.className = value ? "pass" : "fail";
        console.log("this is ", value);
        console.log("that is ", desc);
        console.log("that is ", li);
       // console.log("that is ", className);
        //console.log("that is ", results);
        li.appendChild(document.createTextNode(desc));
        document.getElementById("results").appendChild(li);

        if ( !value ) {
            li.parentNode.parentNode.className = "fail";
        }
        return li;
    };

    function useless(callback) {return callback(); }

    var text = "Domo Arigato!";
    assert(useless(function() {return text;}) === text,
           "The useless function works! " + text); 
</script>


<ul id="results"></ul>

更新:建议现在正常工作之后..谢谢大家

<script>
    window.onload = function () {
       function useless(callback) {return callback(); }

       var text = "Domo Arigato!";
       assert(useless(function() {return text;}) === text,
           "The useless function works! " + text); 

    }
</script>


<ul id="results"></ul>

更新:还有一个问题,

assert(useless(function() {return text;}) === text,

为什么上面需要===文字?它的目的是什么? (我刚刚测试过没有===文本,它也有效..所以作者的目的是什么?)

1 个答案:

答案 0 :(得分:1)

这是因为您的脚本在页面上存在id results的元素之前执行。

你可以:

  • 将脚本放在其后
  • window.onload活动
  • 期间执行您的脚本
  • 更合适的事件是DOMContentLoaded事件