Tìm phần tử html có id bắt đầu bằng


89

câu hỏi của tôi là:

Tôi có mã HTML trong nhiều trang, trên mỗi trang tôi sử dụng một JQgrid (lưới jquery) để hiển thị một số dữ liệu. Tôi biết rằng trên mỗi trang đó, phần tử chứa JQgrid được đặt tên là "LIST_xxx". Bây giờ tôi cần tạo một javascript lấy phần tử đó "LIST_XXXX" trên mỗi trang và thực hiện một số nội dung. Làm cách nào tôi có thể tìm kiếm một phần tử theo ID mà chỉ biết phần đầu của nó (của ID, như tôi đã đề cập trước đây):

$('#list_[XXXX]')... --> The part surrounded by [] is variable on each page, i want to discriminate that.

Tôi hy vọng tôi đã làm rõ bản thân mình. Cảm ơn.

Câu trả lời:


170

Thử

$('div[id^="list_"]')

Nó sẽ hoạt động


Bố cục tốt hơn nhiều trên tham chiếu đó so với tài liệu jquery.
Yuriy Faktorovich

Điều này hoạt động tốt, cảm ơn ... Tôi đã sử dụng nó để tìm một id kết thúc bằng giá trị cụ thể như if ($ ('div [id $ = "' + val + '"]'). Length> 0) thực thi một cái gì đó;
raphie

tốt, nó hoạt động tốt cho các ID điều khiển đơn giản ở trên. Cách làm cho nó hoạt động cho các trường hợp như tôi đang điều khiển với các ID như "txt_0_city", "txt_1_city", "txt_2_city", "txt_3_city", v.v. và tôi muốn tổng số tất cả các phần tử như vậy có ID như "txt _ * _ city "
Rajiv Bhardwaj

@Rajiv nếu bạn có quyền kiểm soát html, sẽ rất tốt nếu bạn thêm một lớp như "city" vào mỗi phần tử đó. Sau đó bạn có thể dễ dàng đếm chúng.
Glen Little

@Rajiv nếu bạn không thể cải thiện html, hãy xem api.jquery.com/multiple-attribute-selector - bạn có thể kết hợp các bộ chọn. Ví dụ: $ ("span [id ^ = 'txt _'] [id $ = '_ city']")
Glen Little

22

Bạn cần sử dụng thuộc tính bắt đầu với bộ chọn , như sau:

$('[id^=list_]').whatever()

tốt, nó hoạt động tốt cho các ID điều khiển đơn giản ở trên. Cách làm cho nó hoạt động cho các trường hợp như tôi đang điều khiển với các ID như "txt_0_city", "txt_1_city", "txt_2_city", "txt_3_city", v.v. và tôi muốn tổng số tất cả các phần tử như vậy có ID như "txt _ * _ city "
Rajiv Bhardwaj

Xin chào @Rajiv, chào mừng bạn đến với stackoverflow. Tôi đã trả lời bản sao khác của bình luận của bạn.
Glen Little

8

Đặt cho phần tử đó một tên lớp chung hoặc một số thuộc tính khác mà bạn có thể truy vấn.


Xin chào, cảm ơn câu trả lời của bạn, vấn đề với đề xuất của bạn là có thể có nhiều bảng chứa JQgrid, vì vậy có thể có: "LIST_customer", "LIST_carrier" ..., v.v. Và tôi cần chọn cả hai chỉ dựa trên phần ID ban đầu: "LIST_".
lidermin

1
Tôi hiểu, nhưng đặt tất cả chúng thành lớp Danh sách có vẻ như là một cách tiếp cận dễ đọc và dễ mô tả hơn đối với tôi. Đối với mỗi người của mình, bạn luôn có thể sử dụng bộ chọn bắt đầu bằng jquery như được hiển thị trong các câu trả lời khác.
Yuriy Faktorovich

@lidermin Những gì Yuriy nói sẽ hiệu quả. Tại sao bạn không thêm một lớp vào các điều khiển của mình, chẳng hạn như "danh sách" vì bạn có list_ làm tiền tố của mình. vì vậy khi bạn chọn lớp đó, nó sẽ nhận được từng điều khiển đó. Đây sẽ là cách làm hiệu quả nhất.
Josh Mein

Câu trả lời của Yuriy sẽ hiệu quả. Bạn có thể thêm cùng một lớp (ví dụ: "ListsINeedToFind") vào tất cả các phần tử "LIST_XXXX" của mình, rồi tra cứu chúng bằng cách sử dụng $('.ListsINeedToFind').
Annabelle

Đôi khi cần có nhiều phần tử có cùng lớp nhưng khác ID.
Vincent


1

Để nhận một phần tử kết thúc bằng một id / ký tự nhất định

find('[id$=someid]')

Để nhận một phần tử bắt đầu bằng một id / ký tự nhất định

find('[id*=anotherid]')

Để có được một phần tử khớp với một id / ký tự nhất định

find('[id^=id]')
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.