Tìm tất cả các phần tử có một giá trị thuộc tính nhất định trong jquery


88

Tôi cần tìm tất cả các phần tử có giá trị thuộc tính đặc biệt.

Đây là div tôi cần tìm (tôi có nhiều div ..)

<div imageId='imageN'>...

Tôi chỉ cần lặp qua các div có imageId='imageN'


6
Tôi khuyên bạn nên sử dụng class="imageN"vì HTML hợp lệ. Hoặc data-imageId="imageN"vì lợi ích của HTML5 hợp lệ. Với cái trước, bạn có thể sử dụng bộ chọn lớp.
Andy E

Andy, lý do đằng sau điều này là, các div này được thêm động từ mã phía sau và có các ImageIds khác nhau nhưng cùng một lớp '.
Pabuc

3
u có thể có nhiều lớp class="image imageN"nếu điều đó hữu ích.
Val

Tại sao không chọn trên tên lớp sau đó nếu họ đã có cùng một lớp?
Praxis Ashelin

Câu trả lời:


142
$('div[imageId="imageN"]').each(function() {
    // `this` is the div
});

Để kiểm tra sự tồn tại duy nhất của thuộc tính, bất kể giá trị nào, bạn có thể sử dụng bộ chọn thứ thay thế: $('div[imageId]')


4
@ThiefMaster - Nếu giá trị thuộc tính không phải là hằng số, (tức là nó sẽ thay đổi) thì làm thế nào để tìm nó?
Nhà phát triển

một vài câu hỏi: 1- còn các phần tử khác thì sao ... 2- còn các giá trị khác thì sao ... Tôi có thể có thuộc tính data-food trên nhiều phần tử: div's, img's và a td's, trong đó mỗi phần tử có một giá trị khác nhau.
dsdsdsdsd

@ParthoGanguly Bạn sử dụng một biến theo cách này: $ ('div [imageId = "' + variableName + '"]')
Kama

1
Giải pháp này không thực sự trả lời tiêu đề của trang này. Bạn đang tìm kiếm các phần tử là div. Một giải pháp thích hợp là một giải pháp bất khả tri đối với yếu tố thực tế.
AndroidDev

164

Mặc dù nó không trả lời chính xác câu hỏi, nhưng tôi đã đến đây khi tìm kiếm cách lấy bộ sưu tập các phần tử (các tên thẻ có khả năng khác nhau) chỉ có một tên thuộc tính nhất định (không lọc theo giá trị thuộc tính). Tôi thấy rằng những điều sau đây hoạt động tốt cho tôi:

$("*[attr-name]")

Hy vọng điều đó sẽ giúp ai đó tình cờ truy cập vào trang này tìm kiếm điều tương tự như tôi :).

Cập nhật: Có vẻ như dấu hoa thị là không bắt buộc, tức là dựa trên một số bài kiểm tra cơ bản, những điều sau đây có vẻ tương đương với những điều trên (cảm ơn Matt đã chỉ ra điều này):

$("[attr-name]")

Hoàn hảo! Chỉ cần những gì tôi đang tìm kiếm.
Paulius Matulionis

Rất có thể ... tôi đã không kiểm tra khía cạnh hiệu suất (không phải là một yếu tố quan trọng đối với việc sử dụng của tôi vào thời điểm đó).
sammy34

3
Có sự khác biệt nào giữa điều đó và $("[attr-name]")? (tức là không *)
Matthew

Có, có sự khác biệt nhất định giữa chúng. lỗi tăng ký hiệu ngôi sao trên firefox !!!! (Không thoát ...)
ozz

thêm vào điều này, bạn cũng có thể bao gồm một giá trị thuộc tính, ví dụ:$("[data-toggle='modal']")
MeltingDog

12

Nó không được gọi là thẻ; những gì bạn đang tìm kiếm được gọi là thuộc tính html.

$('div[imageId="imageN"]').each(function(i,el){
  $(el).html('changes');
  //do what ever you wish to this object :) 
});

5

Bạn có thể sử dụng giá trị một phần của thuộc tính để phát hiện phần tử DOM bằng cách sử dụng dấu (^). Ví dụ bạn có các div như thế này:

<div id="abc_1"></div>
<div id="abc_2"></div>
<div id="xyz_3"></div>
<div id="xyz_4"></div>...

Bạn có thể sử dụng mã:

var abc = $('div[id^=abc]')

Điều này sẽ trả về một mảng DOM gồm các div có id bắt đầu bằng abc:

<div id="abc_1"></div>
<div id="abc_2"></div>

Đây là bản demo: http://jsfiddle.net/mCuWS/


4

Sử dụng nối chuỗi. Thử đi:

$('div[imageId="'+imageN +'"]').each(function() {
    $(this);   
});
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.