1

我正在尝试测试特定浏览器上可用的内容(JavaScript 方面)。

例如,如果我只是输入这个:

function checksetAttribute(){
    if(document.getElementById("blar").setAttribute("name","blarDiv")){
        alert("Your browser supports it.");
    }
    else{
        alert("Your browser does not support it.");
    }
}

这会返回关于该属性是否有效的真实答案吗?

4

3 回答 3

2

如果您想测试某个属性是否有效,而不是是否setAttribute有效,那么这是错误的方法,setAttribute总是返回undefined(== false)。相反,测试元素是否具有属性名称作为键 - 并使用新元素而不是从 DOM 中提取的元素,因为 DOM 中的元素可能已被修改。

function attributeWorks(attr, within) {
    return document.createElement(within || 'div').hasOwnProperty(attr);
}

我添加了该within参数,因为某些属性仅存在于某些类型的元素上:例如,如果您始终针对 a 进行测试<div>,则该函数将返回falsefor href

如果你想测试setAttribute函数是否有效,这仍然是错误的方法,因为如果setAttribute没有实现,尝试执行它会抛出错误而不是返回 false。我们可以使用与上面相同的方法,简化我们已经知道参数:

function setAttributeWorks() {
    return document.createElement('div').hasOwnProperty('setAttribute');
}
于 2012-05-30T01:33:09.333 回答
0

我猜如果不支持“setAttribute”,您那里的代码将会失败。

var a = document.createElement("div");
if(a.setAttribute){
    alert("VERY SUPPORTED");
}else{
    alert("Not supported");
}

这将检查 setAttribute 方法是否可用于 dom 元素。

于 2012-05-30T01:33:22.520 回答
0

不。假设浏览器支持document.getElementByIdand setAttribute,它只会设置 name 属性。当该方法返回时void(这是错误的),它将始终发出警报"Your browser does not support it."- 除非抛出异常。

它也不会检查浏览器是否支持name属性。

于 2012-05-30T01:36:07.387 回答