Ký tự đại diện trong bộ chọn jQuery


668

Tôi đang cố gắng sử dụng ký tự đại diện để lấy id của tất cả các thành phần có id bắt đầu bằng "jander". Tôi đã thử $('#jander*'), $('#jander%')nhưng nó không hoạt động ..

Tôi biết tôi có thể sử dụng các lớp của các yếu tố để giải quyết nó, nhưng cũng có thể sử dụng các ký tự đại diện ??

<script type="text/javascript">

  var prueba = [];

  $('#jander').each(function () {
    prueba.push($(this).attr('id'));
  });

  alert(prueba);


});

</script>

<div id="jander1"></div>
<div id="jander2"></div>

2
Đây là một câu hỏi về jQuery (hay chính xác hơn là công cụ Sizzle).
Peter rneholm

1
Chỉ cần lưu ý: Sẽ nhanh hơn nhiều khi thực hiện với các lớp vì jQuery hoặc Sizzle có thể sử dụng các chức năng của trình duyệt (mặc dù không tạo ra nhiều sự khác biệt cho các trình duyệt hiện đại).
Felix Kling


7
Ngoài ra, một điều quan trọng cần lưu ý là $("[id*=jander]")sẽ chọn tất cả các thành phần có ID chứa chuỗi jander.
Gabriel Ryan Nahmias

Câu trả lời:


1279

Để có được tất cả các yếu tố bắt đầu bằng "jander", bạn nên sử dụng:

$("[id^=jander]")

Để có được những người kết thúc với "jander"

$("[id$=jander]")

Xem thêm tài liệu JQuery


22
Các tài liệu đưa ra ví dụ này:$('input[name^="news"]').val('news here!')
Brenden

5
Mã này hoạt động như dự định. Không cần phải trích dẫn gấp đôi, nó chỉ làm tăng cơ hội bỏ lỡ một trích dẫn kết thúc và làm cho nó ít đọc hơn.
nico

4
@nico Thật thú vị, các tài liệu nói rằng nó hoạt động với các thuộc tínhidvề mặt kỹ thuật là một thuộc tính , nhưng tôi đoán với các bản phát hành gần đây của jquery (ví dụ 1.9) và cách thay đổi mới nhất của các thuộc tính và thuộc tính được tạo ra đối với cả hai và do đó bạn có thể sử dụng các bộ chọn thuộc tính cho (ít nhất là một số) thuộc tính.
johnt doanh nhân

Điều gì xảy ra nếu, tôi muốn chọn Ngay cả những người được chọn. ví dụ: tôi hiện có .col-lg-4:even div:nth-child(1)nếu tôi muốn làm như vậy .... tôi sẽ viết gì? "[class^=.col-lg-]:even"? (Tôi dường như không làm cho nó hoạt động)
Luis Robles

Một chút hành vi làm tôi ngạc nhiên ---- nếu tôi sử dụng điều này với "class $ = ..." thì nó tìm kiếm danh sách lớp của một mục, không phải tên các lớp riêng lẻ. Vì vậy, nó chỉ truy cập nếu lớp được tìm kiếm là lớp cuối cùng trên mục đó. Không được thử nghiệm ngoài Chrome. Và không chắc là lỗ hổng trong jQuery hay trong kỳ vọng của tôi về jQuery.
Roger Krueger

115

Vì tiêu đề gợi ý ký tự đại diện, bạn cũng có thể sử dụng điều này:

$(document).ready(function(){
  console.log($('[id*=ander]'));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="jander1"></div>
<div id="jander2"></div>

Điều này sẽ chọn chuỗi đã cho bất cứ nơi nào trong id.


39

Hãy thử jQuery bắt đầu với

bộ chọn, '^ =', vd

[id^="jander"]

Tôi phải hỏi, tại sao bạn không muốn làm điều này bằng cách sử dụng các lớp học?


2
Để thêm ngữ cảnh, tôi đang tìm giải pháp tương tự vì tôi đang sử dụng Django, lớp ModelForm ra lệnh ID dựa trên các mô hình và dường như không cho phép nhóm như thế này; tức là HTML nằm ngoài tầm kiểm soát của tôi.
Christian Mann

Điều này rất hữu ích khi làm việc với ASP.Net WebForms, đặc biệt là Danh sách Radio và Hộp kiểm.
DavidScherer

35

cho các lớp bạn có thể sử dụng:

div[class^="jander"]

Tôi không thể làm việc này, nhận được thông báo về cú pháp không hợp lệ.
stian

14

Để lấy id từ kết hợp ký tự đại diện:

$('[id^=pick_]').click(
  function(event) {

    // Do something with the id # here: 
    alert('Picked: '+ event.target.id.slice(5));

  }
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="pick_1">moo1</div>
<div id="pick_2">moo2</div>
<div id="pick_3">moo3</div>


2
Thay vì "event.target.id", điều này cũng có thể hoạt động: $ (this) .attr ("id")
PJ Brunet

10

Khi bạn có một chuỗi id phức tạp hơn, dấu ngoặc kép là bắt buộc.

Ví dụ: nếu bạn có một id như thế này : id="2.2", cách chính xác để truy cập nó là:$('input[id="2.2"]')

Càng nhiều càng tốt sử dụng dấu ngoặc kép, vì lý do an toàn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.