使用纯JavaScript获取DOM元素值


76

这些解决方案之间有什么区别吗?

解决方案1:

function doSomething(id, value) {
  console.log(value);
  //...
}
<input id="theId" value="test" onclick="doSomething(this.id, this.value)" />

...和解决方案2:

function doSomething(id) {
  var value = document.getElementById(id).value;
  console.log(value);
  //...
}
<input id="theId" value="test" onclick="doSomething(this.id)" />


编辑:正如一些人指出的那样,有一些错别字(包括javascript中缺少函数名),但是从概念上讲,它们是相同的,而且任何一个都能正常工作。
杰夫

3年后进行的编辑使此处的大多数答案无效。
TheMaster

Answers:


84

是的,最值得注意的是!我认为第二个代码不起作用(如果可行,则不是非常可移植)。第一个应该没问题。

// HTML:
<input id="theId" value="test" onclick="doSomething(this)" />

// JavaScript:
function(elem){
    var value = elem.value;
    var id    = elem.id;
    ...
}

这也应该起作用。

更新:问题已被编辑。两种解决方案现在都是等效的。


1
它也适用于元素数组。示例:items[i].id
Taurib 2015年

您是否愿意解释为什么您认为您的答案就是我想要的?
Barrosy

1
如果已经有对该元素的引用,则@Barrosy会获取ID然后再使用getElementById,这是不必要的(解决方案2)。显式传递参数(解决方案#1)有时可能是一种好的编程习惯。
yorick


9

在第二个版本中,您传递了从返回的String this.id。不是元素本身。

所以id.value不会给你你想要的。

您需要使用传递元素this

doSomething(this)

然后:

function(el){
    var value = el.value;
    ...
}

注意:在某些浏览器中,如果您使用第二种浏览器,则可以使用:

window[id].value 

因为元素ID是全局属性,但是 并不安全

传递元素this而不是使用其ID再次获取元素是最有意义的。


6

传递对象:

doSomething(this)

您可以从对象获取所有数据:

function(obj){
    var value = obj.value;
    var id = obj.id;
}

id仅通过:

doSomething(this.id)

获取对象并获得该值:

function(id){
    var value = document.getElementById(id).value;  
}

0

如果我们观察效果没有什么区别-值将是相同的。但是还有更多...

解决方案3:

function doSomething() {
  console.log( theId.value );
}
<input id="theId" value="test" onclick="doSomething()" />

如果DOM元素具有id,那么您可以直接在js中使用它

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.