Nhận giá trị phần tử DOM bằng JavaScript thuần túy


76

sự khác biệt nào giữa các giải pháp này?

Giải pháp 1:

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

... và Giải pháp 2:

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


Chỉnh sửa: Như một số ý kiến ​​đã chỉ ra, có một vài lỗi chính tả (bao gồm cả việc thiếu tên hàm trong javascript), nhưng về mặt khái niệm, chúng giống nhau và một trong hai sẽ hoạt động tốt.
Jeff

Các chỉnh sửa, được thực hiện sau 3 năm khiến hầu hết các câu trả lời ở đây không hợp lệ.
TheMaster

Câu trả lời:


84

Vâng , đáng chú ý nhất! Tôi không nghĩ rằng cái thứ hai sẽ hoạt động (và nếu nó có, không phải là rất linh hoạt ). Cái đầu tiên sẽ ổn.

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

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

Điều này cũng sẽ hoạt động.

Cập nhật: câu hỏi đã được chỉnh sửa. Cả hai giải pháp bây giờ là tương đương.


1
Nó cũng áp dụng cho các mảng phần tử. Ví dụ:items[i].id
Taurib,

Bạn có muốn giải thích lý do tại sao bạn nghĩ câu trả lời của bạn là những gì tôi muốn đi cùng không?
Barrosy

1
@Barrosy lấy id và sau đó sử dụng getElementById là không cần thiết khi bạn đã có tham chiếu đến phần tử (giải pháp # 2). Truyền các tham số một cách rõ ràng (giải pháp số 1) đôi khi có thể là một phương pháp lập trình tốt.
yorick

41

Hàm thứ hai nên có:

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

Sau đó, chúng về cơ bản là cùng một chức năng.


9

Trong phiên bản thứ hai, bạn đang chuyển Chuỗi được trả về từ đó this.id. Không phải bản thân phần tử.

Vì vậy, id.valuesẽ không cung cấp cho bạn những gì bạn muốn.

Bạn sẽ cần phải chuyển phần tử với this.

doSomething(this)

sau đó:

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

Lưu ý: Trong một số trình duyệt, trình duyệt thứ hai sẽ hoạt động nếu bạn đã:

window[id].value 

vì ID phần tử là thuộc tính toàn cục, nhưng điều này không an toàn .

Sẽ là hợp lý nhất nếu chỉ chuyển phần tử với thisthay vì tìm nạp lại bằng ID của nó.


6

Chuyển đối tượng:

doSomething(this)

Bạn có thể lấy tất cả dữ liệu từ đối tượng:

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

Hoặc vượt qua idduy nhất:

doSomething(this.id)

Nhận đối tượng và sau giá trị đó:

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

0

Không có sự khác biệt nếu chúng ta nhìn vào hiệu ứng - giá trị sẽ giống nhau. Tuy nhiên có điều gì đó hơn ...

Giải pháp 3:

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

nếu phần tử DOM có id thì bạn có thể sử dụng nó trong js trực tiếp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.