我非常有价值,所以我试图制作这样的捷径:
LIVE示例:http://jsfiddle.net/nqeUN/
var d = "document" ,
t = "getElementByTagName" ,
d = "div" ,
oc = "onclick";
d[t](d)[0].oc = function(){
alert("1");
}
但它不起作用,原因是什么?我可以在Google plus api中看到所有对象都是这样定义的,作为字符串,它们如何使它工作?
答案 0 :(得分:2)
您需要解决几个问题
d
的值:"document"
和"div"
。 getElementsByTagName
函数需要DOM入口点而不是字符串。将第一个d
切换为document
.oc
使用点表示法时,它将绑定到属性oc
,而不是变量oc
的值。请改用[]
符号代码:
var d = document ,
t = "getElementsByTagName" ,
div = "div" ,
oc = "onclick";
d[t](div)[0][oc] = function(){
alert("1");
}
答案 1 :(得分:1)
d
是一个字符串,而不是document
。
您应该写var d = document
来获取实际的document
对象。
但是,你不应该自己这样做;它使完全不可读的代码。
相反,您应该开发正常,可读的Javascript,然后使用缩小器(例如Microsoft AjaxMin或Google Closure Compiler)在生产中尽可能自动缩小代码。
答案 2 :(得分:1)
字符串适用于属性,但不适用于变量名称。您还定义了d
两次,并且方法名称错误。你可以这样做:
var d = 'document', t = 'getElementsByTagName', div = 'div', oc = 'onclick';
window[d][t](div)[0][oc] = function() { ... }
但这确实降低了可读性,并不是必需的。您可以通过最小化器运行代码以自动获取此代码并仍然保持可读的开发代码。
答案 3 :(得分:1)
如果替换示例中的值,您会看到:
"document".getElementsByTagName("document").onclick = function() {};
1。)d
应设置为全局文档引用,而不是字符串'document'
var d = window.document;
2。)getElementsByTagName
返回与给定DOM节点中包含的给定标记名称匹配的节点,因此将“document”作为字符串传递将查找名为“document”的HTML元素。你需要找到div,例如:
d.getElementsByTagName("div"); // All the 'div' elements in the document
3.。)对于要用作字符串的方法名称,它们必须在括号中
document[ t ]; // document.t won't work, t is not a member
4。)一旦你访问了你关心的节点,你需要遍历它们以向每个元素添加事件处理程序
var d = document.getElementsByTagName("div"),
i = 0,
len = d.length;
for ( ; i < len; i++ ) {
(function() {
// do something with d[i], the current element in the loop
})(i)
}
希望有所帮助!欢呼声。
答案 4 :(得分:0)
因为变量d
是一个字符串;并且String
对象没有getElementByTagName
方法。
此外,您的d
变量正在重新声明为字符串div
;所以你需要将它分配给另一个名字:
var d = "document" ,
t = "getElementByTagName" ,
e = "div" ,
oc = "onclick";
然后,您需要访问window
对象,并检索它的document
属性:
window[d]
检索Document
元素,然后从中检索getElementsByTagName
方法(读取 getElements 而非 getElement )
window[d][t]
然后调用它并向其传递元素的名称,检索返回数组的第一个值,并为其onclick
属性分配一个函数:
window[d][t](e)[0][oc] = function () {
alert("1");
};
答案 5 :(得分:0)
var d = "document",
t = "getElementsByTagName" ,
div = "div" ,
oc = "onclick";
window[d][t](div)[0][oc] = function(){
alert("1");
}
.
访问者更改为括号,因为oc是字符串而不是属性var d
两次getElementsByTagName
,复数元素答案 6 :(得分:0)
全字符串疯狂http://jsfiddle.net/nqeUN/8/
"document"["gg"]()["getElementsByTagName"]("div")["0"]["onclick"] = function(){alert(1);};