Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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 如何设置任何DOM元素的显示值?_Javascript_Html_Dom - Fatal编程技术网

Javascript 如何设置任何DOM元素的显示值?

Javascript 如何设置任何DOM元素的显示值?,javascript,html,dom,Javascript,Html,Dom,有时我想更新一个随机DOMNode的值,但我真的不知道它是什么类型的元素。我假设我需要一些代码块来检查它是什么类型的节点 if(el.tagName == 'input' ) el.value = "foo"; if(el.tagName == 'div') el.innerHTML = "foo"; 或者即使存在某些属性: var value = "foo"; if(el.value != "undefined" && el.value != value) { el

有时我想更新一个随机DOMNode的值,但我真的不知道它是什么类型的元素。我假设我需要一些代码块来检查它是什么类型的节点

if(el.tagName == 'input' ) el.value = "foo";
if(el.tagName == 'div') el.innerHTML = "foo";
或者即使存在某些属性:

var value = "foo";

if(el.value != "undefined" && el.value != value) {
    el.value = value;
}

if(el.innerHTML != "undefined" && el.innerHTML != value) {
    el.innerHTML = value;
}
el确实列出了几种基本类型,但它们只是基本节点类型

更新任何类型的元素显示的最佳方法是什么

更新:@dfsq有个好主意

el["value" in el ? "value" : "innerHTML"] = value;
但是,它似乎不适用于任何元素:

["value" in document.createElement('li')] // true
更新2严格的类型检查可能是一种解决方案:

document.createElement('input').value
""
document.createElement('li').value
0
document.createElement('div').value
undefined
document.createElement('textarea').value
""

注意:没有jQuery解决方案,除非您想指出,

el.value上进行类型检查是一种方法:

var els = ['p', 'div', 'li', 'a', 'input', 'textarea'];
for (var i in els) { 
    var el = document.createElement(els[i]); el.value = 'foo'; console.log(el.value);
}


好吧,没有比你的方法更短的了。只需创建一个全局函数
setElementValue(I\u domElement,I\u value)
,这样你就可以在需要时调用它了。或者您也可以将其添加到每个DomeElement类型原型中,以便执行
el.setValue()
。另外,不要忘记
innerText
。第二个块将不能作为输入/select/textarea使用
innerHTML
属性,并且您没有执行类型调用,因此您实际上要测试属性的值不是字符串“undefined”而不是测试existanceI。我认为这可能会起作用
el[“value”在el中?“value”:“innerHTML”]=值。只有表单元素具有
。但是,它们也有
innerHTML
。这就是为什么此方法首先检查
。@dfsq,除非它是注释,否则它需要是
数据
,但它不是显示元素,所以。。。。。
el[typeof el.value === "string" ? "value" : "innerHTML"] = value;