《DOM编程艺术》中JS验证兼容性为什么要分两次?

function prepareSlideshow(){
    //确保浏览器支持DOM方法
    if (!document.getElementsByTagName) return false;
    if (!document.getElementById) return false;
    //确保元素存在
    if (!document.getElementById("linklist") return false;
    if (!document.getElementById("preview") return false;    

    ....
}

新手。看这本书时候发现里边很多demo都是先验证浏览器是否支持DOM方法,然后再验证一次用这个方法是否真的获取到了某个元素。

好奇为什么还要第一步?难道不是直接验证是否获取到元素就可以了么,如果获取到了,自然所用的DOM方法是被浏览器支持的。
比如上面的if (!document.getElementById) return false;好像并没有必要。

还是这里有什么深意?

阅读 3.4k
4 个回答

如果浏览器没有document.getElementById这个方法,又没有做第一次验证,那么直接用 document.getElementById("linklist")

调用了一个不存在的方法,代码是会报错的

if (!document.getElementsByTagName)
是确定浏览器是否有 document.getElementsByTagName 这个方法,因为一些老的浏览器没有这个方法。在有这个方法的基础上才能用这个方法来查找元素。

前面是验证浏览器是否支持document.getElementById这种API,后面是验证是否存在这个节点。
《DOM编程艺术这本书》挺好的,适合入门,但是我觉得不要太在意这些验证,因为现在几乎所有的浏览器都支持前面你写的那些api。

谢楼上各位回答。不过其实我的疑惑是为什么要验证两遍,我觉得只要验证能用某个DOM方法成功获取一个元素就可以了,不用再另外验证DOM方法本身。
正如@Injet 提到的,这个意义应该是在debug的时候容易锁定问题吧

推荐问题
宣传栏