2012-02-03 41 views
5

Tôi vừa chuyển từ YUI2 sang YUI3. Vì vậy, thay vì sử dụng YAHOO.util.Dom.get(ID_OF_ELEMENT), tôi đã cố gắng sử dụng Y.one('#ID_OF_ELEMENT)'. Nó hoạt động tốt cho một div với idimg123, nhưng không phải với 123img hoặc .YUI nhận phần tử theo phương thức id không hoạt động cho id bắt đầu số

Tôi cũng đã thử sử dụng Y.all nhưng không hoạt động. Cách duy nhất tôi tìm thấy để làm cho nó hoạt động, trong khi vẫn sử dụng YUI, đang sử dụng Y.DOM.byId (được hiển thị là alternative in YUI forum).

Vì vậy, những gì tôi đã làm là để lấy các phần tử với người cuối cùng và nhận được Node với đầu tiên, như thế này:

Y.one(Y.DOM.byId(ID_OF_ELEMENT)).append(SOME_HTML_CONTENT); 

tôi không thể một mình sử dụng chỉ Y.DOM.byId bởi vì tôi cần để thao tác nội dung của nó như a Nút.

Vì vậy, có cách nào để thực hiện điều đó chỉ bằng cách sử dụng Y.one không? Đó có phải là lỗi của YUI không?

Tôi đã nhận xét về điều đó YUI forum entry, vì tôi không biết đó có thực sự là lỗi mà tôi có thể điền vào YUI bug reporting tool hay không.

Trả lời

8

Nếu bạn sử dụng HTML4:

ID và TÊN thẻ phải bắt đầu bằng một chữ cái ([A-Za-z]) và có thể được theo sau bởi bất kỳ số lượng chữ cái, chữ số ([0-9]), dấu gạch ngang ("-"), dấu gạch dưới ("_"), dấu hai chấm (":") và dấu chấm (".").

Xem thêm this link.

=== CẬP NHẬT ===

Đối với html5:

Trong ví dụ của bạn sử dụng Y.one(...) yui gọi là trình duyệt chọn truy vấn nguồn gốc: querySelector(selector) (xem here).
Nhưng không phải tất cả các truy vấn của trình duyệtChức năng của trình duyệt đều chấp nhận tất cả html5 id s được phép. Ví dụ. bộ chọn truy vấn gốc firfox10 không thành công cho id s với chữ số bắt đầu (hãy thử this example trong các trình duyệt khác nhau).
Tại sao? Mozilla sử dụng đặc điểm kỹ thuật CSS2.1 cho selectors:
Mozilla links in his querySelector documentation để Selectors API Cấp 1.
Trong first chapter "Abstract":

Selectors, được sử dụng rộng rãi trong CSS, là mô hình phù hợp chống lại các yếu tố trong cấu trúc cây [SELECT] [CSS21].

Các [SELECT] liên kết đến các Selectors Level 3 và có trong chapter 6.5 "ID selectors":

...
Một bộ chọn ID có chứa một "dấu hiệu số" (U + 0023, #) ngay sau đó theo giá trị ID, phải là CSS identifiers.
...

Từ liên kết css2.1 identifiers specification:

Trong CSS, định danh (bao gồm tên nguyên tố, các lớp học, và ID trong selectors) có thể chứa những chữ số [a- zA-Z0-9] và ISO 10646 ký tự U + 00A0 và cao hơn, cộng với dấu nối (-) và dấu gạch dưới (_); chúng không được bắt đầu bằng một chữ số, hai dấu gạch ngang hoặc dấu gạch ngang theo sau là một chữ số. Định danh cũng có thể chứa các ký tự thoát và bất kỳ ký tự ISO 10646 nào dưới dạng mã số (xem mục tiếp theo). Ví dụ: số nhận dạng "B & W?" có thể được viết là "B \ & W \?" hoặc "B \ 26 W \ 3F".

=== CẬP NHẬT ===

Bạn có thể sử dụng sau selector [id="123"]. Ví dụ:

YUI().use('node', function (Y) { 
    Y.one('[id="123"]').on("click", function (e) { 
     alert("Hello World!"); 
    }); 
}); 

Xem thêm this example.

+1

Đó là HTML4, không phải HTML5. ID phần tử có thể bắt đầu bằng số hoặc hoàn toàn bằng số trong HTML5. http://dev.w3.org/html5/spec/Overview.html#the-id-attribute –

+0

tôi quên, phải, đã thêm nhận xét của bạn. – scessor

+0

Vâng, điều đó giải thích mọi thứ. Vì vậy, tôi đoán YUI3 nên hỗ trợ HTML5 spec. Điều này thực sự là vấn đề bởi vì rất nhiều trang web có thể sử dụng id số hoặc số bắt đầu bằng số. Trong cái cụ thể mà tôi đang xử lý, tôi không thể kiểm soát sự thật đó. Và sử dụng loại hack đó khá xấu xí. – lucasarruda

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