2012-02-21 30 views
22

Khi gọi một plugin tùy chỉnh, làm thế nào tôi có thể nhận được chuỗi chọn hiện tại?Nhận chuỗi bộ chọn jQuery hiện tại?

$('my_selector p').my_plugin(); 

Muốn xuất my_selector p trong tập lệnh của tôi. Làm thế nào tôi có thể truy cập chuỗi này?

+1

trùng lặp của http://stackoverflow.com/questions/500246/how-do-i-get-a-jquery-selectors-expression-as-text – jbabey

Trả lời

34

Bạn có thể sử dụng tài sản selector:

$('my_selector p').selector // my_selector p 

phiên bản bị phản đối:1.7, loại bỏ:.1.9

+8

Điều này không được chấp nhận vì jQuery 1.7 - xem câu trả lời tibc-dev. – skz

+0

@skz là đúng bộ chọn thuộc tính jQuery được ** không dùng nữa kể từ 1.7 ** và ** bị xóa vào 1.9 **: [thuộc tính jQuery .selector (Đã xóa, không được chấp nhận)] (https://api.jquery.com/selector /) – AlbertFM

+9

Thay vì nói rằng nó không được chấp nhận và bị loại bỏ, bạn nói cho chúng tôi biết cách thay thế thích hợp. – Studocwho

2
jQuery.fn.getSelector = function() { 
     return this.data('selector'); 
}; 
+1

+1 để hiển thị cách mở rộng jquery. sử dụng như thế này $ ('someSelector'). getSelector(); – mindandmedia

+3

Có 'undefined' trong trường hợp của tôi (jQuery v2.2.4). – 10basetom

12

bài viết selector deprecation v 1.7:

Nếu bạn chỉ đối phó với id và các lớp học như selectors bạn có thể sử dụng như sau:

var selector = (typeof($(this).attr('id')) !== 'undefined' || $(this).attr('id') !== null) ? '#' + $(this).attr('id') : '.' + $(this).attr('class'); 

Có nhiều cách sạch nhưng kể từ khi loại bỏ các .selector do là mâu thuẫn giữa các trình duyệt từ 1,7, điều này đã được tôi đi đến.

+1

nếu $ (this) .attr ('class') trả về nhiều hơn một lớp đơn lẻ thì sao? điều này sẽ làm cho một bộ chọn không hợp lệ, bạn nên làm '.' + $ (this) .attr ('class'). split ("") .join (".") để thay thế. – vasilevich

+0

Ngoài ra, nếu bộ chọn giống như '.unique-class-123 p mạnh.help' nó sẽ chỉ trả về '.help' – CodeBrauer

1

Với ngành phản đối tôi sử dụng

index = document.getElementById('category').value 
select = $("#category option[value=#{index}]")[0].innerHTM 

chỉ hai dòng mã

hoặc nếu bạn thực sự rẻ với dòng

select = $("#category option[value=#{document.getElementById('category').value}]")[0].innerHTML 
1

Bị phản đối, những lời khuyên chính thức là thêm công cụ chọn làm thông số trong hàm gọi của bạn: https://api.jquery.com/selector/

Các plugin cần sử dụng chuỗi chọn trong plugin của chúng có thể yêu cầu nó như một tham số của phương thức. Ví dụ, một "foo" plugin có thể được viết như

$.fn.foo = function(selector, options) { /* plugin code goes here */ }; 

và người sử dụng các plugin sẽ viết

$("div.bar").foo("div.bar", {dog: "bark"}); 

Redundant, vâng, nhưng nó luôn luôn đáng tin cậy.