Отримання значення елемента DOM за допомогою чистого JavaScript


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

Відповіді:


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
Тауріб

Чи не могли б ви пояснити, чому, на вашу думку, ваша відповідь - це те, з чим я хотів би піти?
Barrosy,

1
Отримання @Barrosy, а потім використання getElementById є непотрібним, коли у вас вже є посилання на елемент (рішення №2). Явне передавання параметрів (рішення №1) іноді може бути гарною практикою програмування.
yorick

41

Друга функція повинна мати:

var value = document.getElementById(id).value;

Тоді вони в основному мають однакову функцію.


9

У другій версії ви передаєте рядок, з якого повернувся this.id. Не сам елемент.

Тож id.valueне дасть вам того, що ви хочете.

Вам потрібно буде передати елемент за допомогою this.

doSomething(this)

тоді:

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

Примітка: У деяких браузерах другий працює, якщо ви це зробите:

window[id].value 

оскільки ідентифікатори елементів є глобальною властивістю, але це не безпечно .

Найбільш розумно просто передавати елемент, thisа не отримувати його знову з його ідентифікатором.


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 має ідентифікатор, ви можете використовувати його безпосередньо в js

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.