2009-02-23 9 views
11

Tôi biết điều này rất đơn giản, nhưng tôi không thể quấn đầu quanh nó. Hiện tại, mã sau trả về "[đối tượng HTMLDivElement], [đối tượng HTMLDivElement]" Tôi muốn nó trả về "div1, div2". Có suy nghĩ gì không? Cảm ơn các bạn.Cách trả về ID phần tử thay vì [đối tượng HTMLDivElement] (Prototype.js)

<HTML> 
<HEAD> 
<script type="text/javascript" src="path_to/prototype.js"></script> 
<script> 
function linkClick() 
{ 
    alert($$('div.basic')); 
} 
</script> 
</HEAD> 
<BODY> 
    <div id="div1" class="basic" onclick="linkClick();"></div> 
    <div id="div2" class="basic" onclick="linkClick();"></div> 
</BODY> 
</HTML> 

Trả lời

2
var ids = $$('div.basic').collect(function(el) { return el.id; }); //array of ids 

alert(ids.join(',')); 

thu thập là tên gọi khác đồ, đó là cho phép bạn chuyển đổi các yếu tố một loại bộ sưu tập thành một kiểu khác bằng cách áp dụng một "selector" chức năng với nhau.

+0

Chỉ để trở thành pedantic: bạn không cần phần ".join (',')". Các trình duyệt dường như làm tự động khi các mảng cảnh báo() ing, như ví dụ của người yêu cầu cho thấy. –

+0

Tôi đã khá chắc chắn về điều đó nhưng tôi figured tôi muốn chơi nó an toàn hơn là bài không làm việc mã. Điều đó và tôi đã quá lười biếng để kiểm tra :) – kwcto

1
alert($$('div.basic').invoke('identify').join(','); 

Lệnh gọi sẽ gọi hàm theo tên. Hàm xác định sẽ cung cấp id. Khi được gọi trên một mảng, nó sẽ trả về một mảng các id của chúng. Tham gia biến chúng thành một chuỗi với dấu phẩy ở giữa.

20

tôi đã cùng một vấn đề, có một giải pháp đơn giản:

Nếu varElement là đối tượng của bạn có chứa một [HTMLDivElement] (hoặc đối tượng DOM khác) chỉ cần thêm '.id'

ví dụ

varElement.id 
+1

Điều này thực sự rực rỡ –

4

Có một tối ưu hóa trong nguyên mẫu đặc biệt cho việc này:

$$('div.basic').pluck('id') 

Nếu tôi đọc câu hỏi của bạn đúng, bạn muốn có một danh sách các ID div, chứ không phải là một chuỗi các ids cách nhau bởi dấu phẩy.