2010-07-26 34 views
5

Theo tài liệu jQuery, tôi cần phải thoát khỏi các siêu ký tự xảy ra trong các chuỗi chọn của tôi, khi chúng xuất hiện dưới dạng chữ. Tuy nhiên, tôi không thể tìm thấy rất nhiều ví dụ cụ thể về khi nào và khi nào không thoát khỏi các bộ chọn. Vì vậy, khi nào và khi nào tôi không cần phải thoát khỏi metacharacters, khi chúng được hiểu là một chữ, trong:Khi nào tôi cần phải thoát khỏi metacharectar? (jQuery Selectors)

Bộ chọn thuộc tính? tức là

$("[attr=value]") 

Bộ chọn id? tức là

$("#id") 

Bộ chọn lớp? tức là

$(".class"); 

Và, có cách nào để viết hàm thay thế metachars trong chuỗi chọn, trong khi vẫn giữ nguyên ký tự đầu? tức là:

// replace all meta chars, preserving the id selection? 
$("#id.rest$of*string") 

// replace all meta chars, preserving the attribute selection? 
// going back to my previous question, do I even need to escape the metachars in this situation? 
$("[attr=blah.dee#foo*yay]") 

Lý do tôi đặt câu hỏi này là vì tôi đang làm việc với một trang web có một số bộ chọn thực sự khó chịu. Và tôi không có quyền kiểm soát trang web, vì vậy tôi không thể thay đổi các bộ chọn để trở nên đẹp hơn.

THANKS !!

Trả lời

3

Từ các tài liệu jQuery:

Nếu bạn muốn sử dụng bất kỳ siêu ký tự (#; &, + * ~ ': "^ $ => | /.!) như một chữ một phần của một tên, bạn phải thoát khỏi nhân vật với hai dấu xồ nguợc ...

Tất cả những phải được thoát ra:

  1. id
  2. tên lớp
  3. tên thuộc tính
  4. giá trị thuộc tính
  5. tên phần tử

Bốn đầu tiên là hiển nhiên, và đây là một ví dụ cho thứ năm. Tên phần tử trong XML có thể chứa "." chẳng hạn như ký tự và vẫn là valid.

<user.name>John Doe</user.name> 

Nếu bạn phải chọn tất cả các yếu tố của user.name, sau đó . phải được thoát

$(xml).find("user\\.name"); 
0

Thay vì ngang nhiên ăn cắp câu trả lời của người khác, tôi sẽ điểm bạn với nó: jQuery selector value escaping, nơi jQuery phương pháp phân tích cú pháp chọn được mô tả chi tiết.

Câu trả lời ngắn: bạn có thể gặp rắc rối vì trình phân tích cú pháp chọn của jQuery không phải là 100% tiêu chuẩn-khiếu nại. Theo đề xuất trong câu trả lời được liên kết, bạn có thể giải quyết bằng cách gọi các phương thức DOM thông thường (document.getElementById()), sẽ làm việc với các bộ chọn hài hước và sau đó chuyển phần tử DOM thô vào bộ chọn jQuery.

$(document.getElementById("id.rest$of*string")); 
Các vấn đề liên quan