2015-06-03 14 views
9

Có gì đó tôi không nhìn thấy ở đây .. Tôi có một chuỗi biến với các yếu tố id:jQuery chuỗi biến như id-selector trở lại đối tượng rỗng

var sf_new_id = "#sf_widget_choice-32:14.86:1:1" 

Tôi nhận được rằng chuỗi từ một yếu tố như này ('sf_selectedmethod' là một phần tử):

var anotherid = sf_selectedmethod.attr('id'); 

Sau đó, tôi loại bỏ các char cuối cùng và thêm một số thông tin để id đó, cụ thể là số cuối cùng và '#':

var sf_new_id = anotherid.substr(0, anotherid.length-1); // Now without the last char. 
sf_new_id = '#'+sf_new_id+'1'; 

Và nó sẽ trở thành chuỗi mô tả ở trên.

Và tôi đang cố gắng để truy cập vào các phần tử với jQuery như thế này:

$(sf_new_id).addClass("..."); 

Các phần tử với id mà tồn tại, nhưng không có gì xảy ra. Tôi cũng cố gắng che giấu phần tử:

$(sf_new_id).hide(); 

Nhưng vẫn không có gì xảy ra.

tôi đặt toàn bộ yếu tố thành console.debug, và nó cho thấy một đối tượng rỗng:

console.debug($(sf_new_id)); 

Đầu ra: Object [] trong giao diện điều khiển

tôi đang thiếu gì ở đây?

Chỉnh sửa: Tôi đã cố gắng thoát và điều này có vẻ hiệu quả, nhưng bây giờ vấn đề là làm cách nào để thoát khỏi dấu hai chấm và khi thông tin có trong biến?

+0

mã của bạn có được thực hiện sau khi tải trang không? $ (Tài liệu) .ready (function() {... your code ...}) – Yangguang

+3

Bạn cần phải thoát các ký tự như ':' và ' . ' trong biến chuỗi của bạn. – Prachit

+0

Tôi có nghi ngờ biến javascript được khai báo với # là ký tự đầu tiên ?? – shreyansh

Trả lời

7

Bạn phải thoát khỏi các ký tự đặc biệt trong chuỗi của mình, để tạo một bộ chọn hợp lệ.

var sf_new_id = "#sf_widget_choice-32:14.86:1:1"; 

sf_new_id = sf_new_id.replace(/:/g, "\\:") 
        .replace(/\./g, "\\.") 

$(sf_new_id).hide(); 
+0

Yesh !! Điều này hoạt động đẹp! Cảm ơn nhiều bạn! Cảm ơn những người khác. Tôi đã cho bạn tất cả tín dụng bởi vì câu hỏi ban đầu không đủ rõ ràng. Xin lỗi vì điều đó. – GotBatteries

5

Bạn cần phải thoát khỏi :. trong bộ chọn của mình. Hãy thử điều này:

var sf_new_id = "#sf_widget_choice-32\\:14\\.86\\:1\\:1"; 
9

Bạn có thể sử dụng kỹ thuật dấu hai chấm và dấu chấm trong thuộc tính id/name, nhưng tôi khuyên bạn nên tránh cả hai.

Trong một số thư viện JavaScript như jQuery, cả dấu chấm và dấu hai chấm đều có ý nghĩa đặc biệt và bạn sẽ gặp sự cố nếu bạn không sử dụng chúng một cách cẩn thận. Các khoảng thời gian là các bộ chọn lớp và dấu hai chấm là các bộ chọn giả (ví dụ: ", di chuột" cho một phần tử khi con chuột vượt qua nó).

Cố gắng tránh "." và ":" trong thuộc tính ID của bạn hoặc nếu không thể. hãy thử thoát chúng trong javascript như sau:

var sf_new_id = "#sf_widget_choice-32\\:14\\.86\\:1\\:1"; 
3

ID phải phù hợp:

[A-Za-z][-A-Za-z0-9_:.]* 
  1. Phải Bắt đầu với AZ hoặc các ký tự az
  2. Có thể chứa - (gạch nối), _ (gạch dưới) ,: (dấu hai chấm) và. (khoảng thời gian)

nhưng bạn nên tránh: và.beacause:

Ví dụ: ID có thể được gắn nhãn "ab: c" và được tham chiếu trong biểu định kiểu là #ab: c nhưng cũng là id cho phần tử, nó có thể có nghĩa là id "a", class "b", bộ chọn giả "c". Tốt nhất để tránh nhầm lẫn và tránh xa việc sử dụng. và: hoàn toàn.

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