示例代码
document.body.getAttribute.apply(this,['id']);
document.body.setAttribute.apply(this,['id','test']);
错误
火狐:
TypeError:在没有实现接口Element的对象上调用'setAttribute'。
铬:
未捕获的TypeError:非法调用
答案 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]
随意纠正我:)