为什么不应用DOM元素函数?

时间:2015-10-15 14:19:34

标签: javascript dom

示例代码

document.body.getAttribute.apply(this,['id']);
document.body.setAttribute.apply(this,['id','test']);

错误
火狐:

  

TypeError:在没有实现接口Element的对象上调用'setAttribute'。

铬:

  

未捕获的TypeError:非法调用

3 个答案:

答案 0 :(得分:2)

apply工作得很好。它正在调用setAttribute函数,并且在该函数内部this的值就是你设置的值。)

我们无法看到您将其设置为什么,因为您传递的是this,而没有告诉我们它的价值是什么。

显然,this不是DOM元素,因此您无法在其上设置DOM属性。

如果您曾在document.body.getAttribute()内拨打setAttribute,则this的值将为document.body,这是一个DOM元素。

如果this在此示例中是一个DOM元素,则可以看到它正常工作:

document.querySelector('div').setID = function () {
    document.body.setAttribute.apply(this,['id','test']);
}

document.querySelector('div').setID();
document.querySelector('div').innerHTML = document.querySelector('div').id;
<div></div>

答案 1 :(得分:2)

这有效:

document.body.setAttribute.apply(document.body,['id','test']);
document.body.getAttribute.apply(document.body,['id']);

在你的代码中(如果你在任何函数之外执行),this引用了window元素,所以你的代码相当于:

window.setAttribute("id","test");

是不允许的

答案 2 :(得分:0)

您需要apply的具体原因吗?由于this是您的窗口对象。对id应用document.body.getAttribute('id'); document.body.setAttribute('id','test'); document.body.getAttribute('id'); 可能不太有用甚至不允许。据我所知,我会采用这种方法:

where [Date].[Month].&[200609] : [Date].[Month].&[200710]

随意纠正我:)