2011-07-23 23 views
14

Tôi có một phần tử có id = "A B". Các mã sau không:jQuery: xử lý một khoảng trống trong thuộc tính id

<input type="text" id="A B"> 
<script>$("#A B").click(function(){alert();});</script> 

đoạn mã sau không thất bại:

<input type="text" id="AB"> 
<script>$("#AB").click(function(){alert();});</script> 
+0

thể trùng lặp của [ID jquery với không gian] (http://stackoverflow.com/questions/596314/jquery-ids- with-spaces) –

Trả lời

24

Trong khi đó là kỹ thuật không hợp lệ để có một không gian trong một ID giá trị thuộc tính trong HTML (xem @ câu trả lời karim79 của) , bạn thực sự có thể chọn nó bằng cách sử dụng jQuery.

Xem http://mothereffingcssescapes.com/#A%20B:

<script> 
    // document.getElementById or similar 
    document.getElementById('A B'); 
    // document.querySelector or similar 
    $('#A\\ B'); 
</script> 

jQuery sử dụng một cú pháp Selectors API giống như, vì vậy bạn có thể sử dụng $('#A\\ B'); chọn một thành phần với id="A B".

Để nhắm mục tiêu các phần tử trong CSS, bạn có thể thoát khỏi nó như thế này:

<style> 
    #A\ B { 
    background: hotpink; 
    } 
</style> 
+0

Trong trường hợp bất kỳ ai thắc mắc, điều này cũng hoạt động với Capybara khi cố gắng chọn một id có dấu cách. –

1
 
ID tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods ("."). 

Đó quote được kéo từ một stackoverflow câu trả lời: jquery IDs with spaces

9

Cả HTML4 và cũng không HTML5 cho phép các ký tự khoảng trắng trong các giá trị thuộc tính ID.

HTML 4,01 bang spec mà thẻ ID phải bắt đầu bằng một lá thư ([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 nối (-), dấu gạch dưới (_), dấu hai chấm (:) và dấu chấm (.). Đối với thuộc tính lớp, không có giới hạn nào như vậy. Tên lớp có thể chứa bất kỳ ký tự nào và chúng không phải bắt đầu bằng một chữ cái để hợp lệ.

HTML5 loại bỏ các hạn chế bổ sung đối với thuộc tính id. Yêu cầu chỉ còn lại - ngoài việc là duy nhất trong tài liệu - là rằng giá trị phải chứa ít nhất một ký tự (không được để trống), và không được chứa bất kỳ ký tự khoảng trắng nào.

Nguồn:

http://mathiasbynens.be/notes/html5-id-class

+0

+1 Điều này đúng.Tuy nhiên, mặc dù về mặt kỹ thuật không hợp lệ để có một khoảng trống trong một giá trị thuộc tính ID trong HTML, [bạn có thể làm cho nó hoạt động nếu bạn thoát khỏi bộ chọn jQuery của bạn một cách chính xác] (http://stackoverflow.com/questions/6802765/jquery-dealing-with -a-không-trong-id-thuộc tính/7873035 # 7873035). –

9

Khi họ nói bạn không nên sử dụng khoảng trống trong id. Nhưng dù sao, điều này sẽ không hiệu quả với bạn?

$("[id='A B']").click(...) 

EDIT: có nó hoạt động, đã kiểm tra !!! Đừng giết tôi, những người yêu tiêu chuẩn !! ;-p

3

Không nên có không gian trong một id, nhưng điều này dường như công trình:

$("[id=A B]") 
+0

có vẻ như chúng tôi đã đăng nó cùng một lúc :) – TMS

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