2013-04-02 42 views
7

Tôi đi qua 3 cách để lưu trữ bất kỳ dữ liệu nào với đối tượng HTMLElement.Các phương pháp hay nhất để liên kết dữ liệu với các đối tượng HTMLElement?

Ai đó có thể đề xuất phương pháp hay nhất để liên kết bất kỳ dữ liệu nào với đối tượng phần tử không?

Tôi thích số 3 vì nó không đặt bất kỳ thuộc tính HTML nào như trong trường hợp 1 và 2. Giống như cài đặt và nhận bất kỳ thuộc tính nào trên đối tượng.

  1. Sử dụng setAttribute ('nonStandardDataProperty')
  2. Sử dụng tài sản dữ liệu của phần tử html đối tượng ví dụ dataset.x cho dữ liệu xattribute
  3. phần tử html là đối tượng, vì vậy xác định bất kỳ tài sản và nó sẽ đóng vai trò lưu trữ dữ liệu cho phần tử đó
+0

Không phải 1 và 3 giống nhau ? – NilsH

+0

Tùy chọn 3 chỉ là đối tượng sau khi bạn lấy một tham chiếu trên nó, điều này loại bỏ việc nhận dữ liệu liên quan từ máy chủ. – Valentin

+0

@NilsH: Không, chỉ trong các IE tuyệt chủng. Đọc [prop vs attr] (http://stackoverflow.com/q/5874652/1048572) – Bergi

Trả lời

2

Tùy chọn # 2 dường như với tôi là "tuân thủ tiêu chuẩn" nhất, nếu đó là những gì bạn đang tìm kiếm; Ngoài ra, nó cho phép bạn thiết lập các thuộc tính đó từ bên trong HTML trong khi vẫn duy trì đánh dấu hợp lệ. Nó thường là sở thích của tôi, nhưng nó thực sự bất cứ điều gì làm việc tốt nhất cho bạn trong tình huống của bạn: nếu nó hoạt động, đi với nó.

0

Tùy chọn thứ ba là lưu trữ dữ liệu trong DOM có thể không phải là ý tưởng tồi nếu dữ liệu không lớn. Nếu có, lưu trữ và truy xuất dữ liệu có thể ảnh hưởng đến hiệu suất của ứng dụng.

+3

Vâng, tốt: http://perfectionkills.com/whats-wrong-with-extending -e-dom/ –

+0

@FelixKling liên kết tốt! – Alnitak

+0

@ FelixKling Bài viết hay có lý do chính đáng nhưng thật đáng buồn là chúng tôi không được phép sử dụng thừa kế nguyên mẫu vốn là sức mạnh thực sự của JavaScript. –

-1

Twitter Bootstrap sử dụng tùy chọn một.

Hãy xem tài liệu Twitter Bootstrap, bạn sẽ thấy sử dụng nhiều dữ liệu lưu trữ trong các phần tử html thuộc tính không chuẩn.

dụ

<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="dLabel"> 
    ... 
</ul> 


<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> 
+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. – Mxyk

+0

Cảm ơn lời khuyên. Tôi đã trả lời câu trả lời của mình. – lngs

+0

Tôi không thấy bất kỳ tên thuộc tính không chuẩn nào trong đoạn mã html của bạn. – Bergi

1

tôi sẽ sử dụng tùy chọn # 1 vì đó là di động nhất.

Tuy nhiên, tôi sẽ sử dụng tiền tố data- của HTML5 cho các thuộc tính tùy chỉnh đó để tương thích với phương thức .data() của jQuery.

+0

Điều này sẽ chỉ hoạt động với dữ liệu có thể tuần tự, đúng không? –

+0

@FelixKling không có trong kinh nghiệm của tôi nếu bạn sử dụng '.data' để ghi dữ liệu ngay từ đầu. Lưu trữ dữ liệu dưới dạng thuộc tính chứ không phải là thuộc tính. – Alnitak

+0

@Alnitak: Phương thức '.date()' của jQuery không sử dụng HTML [dataset] (https://developer.mozilla.org/en-US/docs/DOM/element.dataset), nơi bạn chỉ có thể lưu trữ các chuỗi (giống như trong các thuộc tính dữ liệu). – Bergi

0

Tôi đoán cách tốt nhất là sử dụng dữ liệu HTML5- * Thuộc tính và hàm .data() của jQuery. Nó có thể sẽ có cách tốt nhất để lưu trữ dữ liệu trong các phần tử HTML built-in và cập nhật các công nghệ mới nhất trong tương lai, vì vậy bạn có thể tựa lưng và chỉ được sản xuất

<div id="myDiv" data-my-var="my-var-value"></div>

thể được sử dụng trong JavaScript như thế này : (jQuery cần)

console.log($('#myDiv').data('my-var'))

Edit: và thiết lập như thế này

$('#myDiv').data('my-var', 'my-new-var-value');

đó cũng sẽ cập nhật các đĩa dữ liệu * thuộc tính trong trường hợp này

0

Lựa chọn 4: lưu trữ định danh trên DOMNode mà bạn có thể sử dụng để tìm kiếm mọi thứ trong một bản đồ tách ra (vâng, đây là cách jQuery làm nó - trên tất cả các thuộc tính data- * trong init, tất nhiên).

Đi với # 3 là tốt nếu bạn nhớ tên thuộc tính của mình. # 2 chỉ nên cho phép các giá trị Integer và String, # 1 có thể có cùng một vấn đề.

Tôi muốn đi với số 4, đơn giản vì tôi không thích tỷ lệ cược của thông số mới xuất hiện và tuyên bố tên thuộc tính tôi đã sử dụng cho dữ liệu của riêng mình…

+0

cảm ơn. Bạn có thể vui lòng xây dựng "nhìn những thứ lên trong một bản đồ tách rời"? –

+0

Lưu ý rằng điều này có thể có vấn đề về thu gom rác. – Bergi

Các vấn đề liên quan