2010-11-10 44 views
23

Tôi đang suy nghĩ về việc sử dụng các thuộc tính tùy chỉnh trong Jquery để tránh sử dụng thuộc tính lớp hoặc id, để không can thiệp vào các nhà thiết kế html.Thuộc tính tùy chỉnh Jquery

Có tính đến ý tưởng này, html nên mảnh như:

<ul Jquery="CommonUl"> 
    <li Jquery="CommonLi"></li>  
    <li Jquery="CommonLi"></li> 
    <li Jquery="CommonLi"></li> 
    <li Jquery="CommonLi"></li> 
    <li Jquery="CommonLi"></li> 
</ul> 
  • Bạn có nghĩ rằng đây là một cách tiếp cận tốt?

  • Ý kiến ​​của bạn về xác thực W3C của các thuộc tính tùy chỉnh này là gì?

  • Bạn có biết cách nào để lập trình với Jquery mà không can thiệp vào công việc của nhà thiết kế html không?

  • Về hiệu suất, tôi giả sử rằng với thuộc tính lớp hoặc id, bộ chọn jquery nhanh hơn sử dụng thuộc tính tùy chỉnh và chức năng lọc như "chứa, v.v ...". Thê nay đung không?

+2

Ý kiến ​​của tôi về việc xác thực của W3C cho điều này là nó sẽ thất bại. :) Bạn có quen thuộc với '.data()' của jQuery không? (Nó sẽ không giúp đỡ nếu bạn cần lưu trữ dữ liệu trực tiếp trong đánh dấu, mặc dù) –

+2

Trên thực tế @Pekka nó sẽ, với jQuery 1.4.3! Một cuộc gọi đến '.data (" foo ")' sẽ nhận giá trị 'data-foo =" value "' trên một phần tử. – Pointy

+1

@Pointy yeah, nhưng 'data- *' không hợp lệ trong HTML 4 ... –

Trả lời

81

Bạn có thể làm điều này, sử dụng data- attributes dù (part of the HTML5 specification), như thế này:

<li data-something="CommonLi"></li> 

jQuery thậm chí đã xây dựng-in hỗ trợ cho các trong 1.4.3+, ví dụ:

$("li").data("something") //"CommonLi" 

Đối với các câu hỏi khác của bạn:

  • Họ sẽ xác nếu nó HTML5 - nhưng sẽ không nghỉ bất cứ điều gì trong HTML4
  • này không nên can thiệp vào việc thiết kế, nhưng nó sẽ phụ thuộc vào thiết kế
  • Nếu bạn tìm nạp từ một phần tử, hiệu suất giống với bất kỳ thuộc tính nào khác
+0

Tuy nhiên, điều này sẽ không hợp lệ trong HTML 4, vì vậy nếu điều quan trọng là hỗ trợ các trình duyệt cũ hơn và W3C hợp lệ thì đó không phải là một lựa chọn đáng buồn. Nếu đó không phải là vấn đề, đây là cách tốt nhất để đi –

+1

@Pekka - Tôi đồng ý, nhưng 100% hợp lệ không quan trọng bằng chức năng 100% ... nếu không có khoảng trống trong thông số là cần thiết, chúng sẽ không được thêm vào HTML5 :) Upping HTML5 DOCTYPE nên chăm sóc cả hai mặt ở đây. –

+0

Xin chào, cảm ơn trước ... Phản hồi tuyệt vời. Vấn đề là có lẽ chúng tôi sẽ không sử dụng HTML 5 một cách minh bạch sẽ không được hoàn thành cho đến năm 2012. – Jose3d

1

Tôi muốn cá nhân bạn nên sử dụng phương pháp dựng sẵn jquery để lưu dữ liệu với từng phần tử. Sau đây là đoạn mã cho lưu dữ liệu:

$("ul").data("CommonUl"); 
$("li").data("CommonLi"); 
+0

Trước hết, cảm ơn ... Tôi không biết cách lưu trữ dữ liệu của phần tử này. Vấn đề là có lẽ tôi sẽ không cần phải nói một cái gì đó như: "tất cả ul và li sẽ có các dữ liệu sau đính kèm", thay vào đó sẽ có một số yếu tố cụ thể (có thể trong trang có 4 ul, và tôi sẽ thích áp dụng này đến một và không theo vị trí) ... Trân trọng. – Jose3d

8

nếu bạn đang lập kế hoạch để có một vài thuộc tính Tôi đề nghị để thiết lập một thuộc tính namespaced độc đáo, ví dụ

<li data-yourapp>...</li> 

và sử dụng thuộc tính mà giống như một Hashtable

$("li").data("yourapp", { 
    points : 2000, 
    life : 1, 
    weapons : { 
     firegun : 0, 
     missiles : 12 
    } 
}); 

theo cách này bạn sẽ giảm truy cập phần tử và bạn sẽ lấy tất cả dữ liệu tùy chỉnh một lần

+0

Đẹp ... không biết bạn có thể làm điều này. – Adam

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