Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON到setAttribute()_Javascript_Json - Fatal编程技术网

Javascript JSON到setAttribute()

Javascript JSON到setAttribute(),javascript,json,Javascript,Json,我几乎已经完成了以下工作,但遇到了许多令人困惑的方法。我们希望使用attr{}中的key:value作为setAttribute()方法属性,而不使用框架 请提供一个简单的解决方案: testDiv = document.getElementById("testDiv"); attr = { align:"center", title:"The Test Div" }; //Possible converting JSON to String, the use in s

我几乎已经完成了以下工作,但遇到了许多令人困惑的方法。我们希望使用attr{}中的key:value作为setAttribute()方法属性,而不使用框架

请提供一个简单的解决方案:

testDiv = document.getElementById("testDiv");


attr = {

    align:"center",
    title:"The Test Div"

};

//Possible converting JSON to String, the use in setAttribute?

for(var x in attr) alert(x + " , " + attr[ x ] );

testDiv.setAttribute( x ,  attr[ x ]);

这里没有JSON,而是一个对象文本。无论如何,如果我理解正确,您想为一个特定元素设置所有指定属性吗?如果您想要一些可重用的东西,函数中的循环应该很容易做到:

function setMultipleAttributes(el, attributes) {
   for (var attr in attributes)
     el.setAttribute(attr, attributes[attr]);
}

var testDiv = document.getElementById("testDiv");

setMultipleAttributes(testDiv, { align : "center", title : "The Test Div" });

您的问题与“JSON”(实际上只是一个JavaScript对象文本)或设置属性无关。是这样的:

for(var x in attr) alert(x + " , " + attr[ x ] );

testDiv.setAttribute( x ,  attr[ x ]);
由于在
for
循环中不使用大括号,因此只执行紧跟其后的语句。如果我添加大括号,上面的代码如下所示:

for(var x in attr){
    alert(x + " , " + attr[x] );
}
testDiv.setAttribute( x ,  attr[x]);
setAttribute
不在循环中调用-它只在末尾调用一次。相反,你可能想要

for(var x in attr){
    alert(x + " , " + attr[x] );
    testDiv.setAttribute( x ,  attr[x]);
}

有什么问题吗<代码>用于(attr中的var x)testDiv.setAttribute(x,attr[x])应该可以正常工作。当然,对于非字符串属性,IE中的
setAttribute
本身存在问题;您可能需要考虑使用属性来代替。对于(attr中的var x)testDiv[x]=attr[x],这仍然只是
不过。你到底想完成什么?如果您只是希望将属性映射到HTML节点,那么您的方法可以正常工作。但是请注意,您需要在for循环中的块周围使用大括号,否则它将不会执行循环中的第二条语句。用法:
for(attr中的var x){alert(x+”,“+attr[x]);testDiv.setAttribute(x,attr[x]);}
找到了IE风格的变通方法:感谢所有的解决方案和术语说明。在尝试使用setMultipleAttributes()方法扩展Element.prototype之前,我是否应该注意IE的任何怪癖,DOM的任何扩展都应该包括自定义DTD吗?