Bộ chọn jQuery: Id kết thúc với?


393

Có cái selectornào tôi có thể truy vấn các phần tử có ID kết thúc bằng một chuỗi đã cho không?

Nói rằng tôi có một yếu tố với một id của ctl00$ContentBody$txtTitle. Làm thế nào tôi có thể có được điều này bằng cách vượt qua chỉ txtTitle?


16
tốt trang chủ ID cũ xáo trộn!
Khóa Matthew

1
Đặt ClientIDMode=statictừ ASP.Net 4.0 trở đi và thoát khỏi điều này :)
Murali Murugesan

1
ClientIDMode = static sẽ không hoạt động đối với những người đang cố gắng tìm một phần tử trong bộ lặp!
Stuart

Câu trả lời:


629

Nếu bạn biết loại phần tử thì: (ví dụ: thay thế 'phần tử' bằng 'div')

$("element[id$='txtTitle']")

Nếu bạn không biết loại phần tử:

$("[id$='txtTitle']")

Thêm thông tin có sẵn



10
Tôi sẽ tìm nó kết thúc bằng '$ txtTitle'. Nó không có nhiều rủi ro với tiền tố 'txt', nhưng nếu bạn chọn là 'NameTextBox', thì nó sẽ khớp với 'NameTextBox', 'FirstNameTextBox', LastNameTextBox ', v.v.
Đánh dấu

11
Một người dùng ẩn danh chỉ cố gắng chỉnh sửa phần sau. Thêm nó dưới dạng một nhận xét (vì nó có vẻ hợp lý): Điều này không cung cấp cho các yếu tố kết thúc bằng id txtTitle. Đây là docs: api.jquery.com/element-selector .. bộ chọn lọc tương đương với getElementsByTagName. Nó không có gì để làm với id của phần tử. Nếu bạn muốn truy cập các phần tử kết thúc bằng id, thì hãy sử dụng cú pháp $ ("[id $ = 'txtTitle']") hoặc nếu bạn biết loại phần tử ..eg div .. sau đó sử dụng cú pháp này $ ("div [id $ = 'txtTitle'] ")
Pekka

1
Liên kết là rất hữu ích. Không phải trang tự nó, nhưng nó tách ra thành 2 trang bổ sung mà tôi cần. Tôi đã học cách nắm bắt các phân đoạn của một tiêu đề, chẳng hạn như nếu ID xuất hiện dưới dạng "masterPage1_Control0_MyTableName_moreStuff" trong Xem Nguồn, tôi có thể khóa vào bảng <asp: Table ID = "MyTable" ... bằng cách sử dụng $ ("id *" = MyTable] "). Nghĩ về nó, tôi thích id $ hơn. Hmmm ...
Lukas

Điều này tìm thấy các yếu tố document.getElementById("f:fTest:j_idt51:0:inpTest"). Điều này không có $("[id$='inpTest']"). Có phải vì dấu hai chấm không được phép trong ID (nhưng JSF thêm nó!)?
Panu Haaramo

Có cách nào để sử dụng bộ chọn này với CSS, như bộ chọn giả không?
Alejandro Nava

250

Câu trả lời cho câu hỏi là $("[id$='txtTitle']"), như Mark Hurd đã trả lời , nhưng đối với những người, giống như tôi, muốn tìm tất cả các phần tử có id bắt đầu bằng một chuỗi đã cho (ví dụ: txtTitle), hãy thử điều này ( doc ):

$("[id^='txtTitle']")

Nếu bạn muốn chọn các phần tử mà id chứa một chuỗi đã cho ( doc ):

$("[id*='txtTitle']")

Nếu bạn muốn chọn các phần tử mà id không phải là một chuỗi ( doc ) đã cho:

$("[id!='myValue']")

(nó cũng phù hợp với các yếu tố không có thuộc tính được chỉ định)

Nếu bạn muốn chọn các thành phần mà id chứa một từ đã cho, được phân cách bằng dấu cách ( doc ):

$("[id~='myValue']")

Nếu bạn muốn chọn các phần tử mà id bằng một chuỗi đã cho hoặc bắt đầu bằng chuỗi đó theo sau là dấu gạch nối ( doc ):

$("[id|='myValue']")

Nếu bạn thêm vào câu hỏi thực sự trả lời câu hỏi, ví dụ $ ("[id $ = 'txtTitle']") và đặt nó đầu tiên trong danh sách tôi sẽ bỏ phiếu cho câu trả lời của bạn. Hiện tại tôi không thể trả lời vì bạn không trả lời câu hỏi
Alan Macdonald

2
@AlanMacdonald Tôi không chắc chắn việc thêm nó là đúng. Tôi đã trả lời câu hỏi một thời gian dài sau khi một câu trả lời được chấp nhận, chỉ để thêm thông tin cho khách truy cập. Tôi hy vọng rằng những người nêu lên câu trả lời của tôi cũng nêu lên câu trả lời cho câu hỏi.
Romain Guidoux

1
@RomainGuidoux đủ công bằng đó là cuộc gọi của bạn, nhưng tôi không nêu ra câu trả lời không đưa ra giải pháp cho câu hỏi được hỏi vì không rõ ràng đối với người mới gặp vấn đề tương tự như OP nếu họ đến trang và có một sự cố bỏ phiếu trả lời mà thậm chí không trả lời câu hỏi. Nếu bạn thay đổi nó để trả lời câu hỏi, tôi sẽ đưa ra câu trả lời của bạn thay vì câu trả lời được chấp nhận vì đây là một câu trả lời đầy đủ và hữu ích hơn. Ether đó hoặc đáng lẽ phải là một nhận xét về câu trả lời được chấp nhận hơn là một câu trả lời cho câu hỏi.
Alan Macdonald

1
@AlanMacdonald Xong, bạn đã thuyết phục tôi.
Romain Guidoux

33

Thử

$("element[id$='txtTitle']");

chỉnh sửa: trễ 4 giây: P


32
$('element[id$=txtTitle]')

Không nhất thiết phải trích dẫn đoạn văn bản mà bạn phù hợp với


2
Đây phải là câu trả lời đúng! Sử dụng "và" chỉ gây nhầm lẫn.
Kees C. Bakker

13

An toàn hơn khi thêm dấu gạch dưới hoặc $ vào cụm từ bạn đang tìm kiếm để ít có khả năng khớp với các yếu tố khác kết thúc trong cùng một ID:

$("element[id$=_txtTitle]")

(nơi yếu tố là loại yếu tố bạn đang cố gắng để tìm thấy - ví dụ div, inputvv

(Lưu ý, bạn đang đề xuất ID của bạn có xu hướng có dấu $, nhưng tôi nghĩ .NET 2 hiện có xu hướng sử dụng dấu gạch dưới trong ID, vì vậy ví dụ của tôi sử dụng dấu gạch dưới).


1
Có bạn đúng. Tài sản ID sử dụng dấu gạch dưới. Tên tài sản sử dụng ký hiệu đô la.
Josh Stodola

3

Một ví dụ: để chọn tất cả các <a>s có ID kết thúc bằng _edit:

jQuery("a[id$=_edit]")

hoặc là

jQuery("a[id$='_edit']")

3

Vì đây là ASP.NET, bạn chỉ cần sử dụng thẻ ASP <% =%> để in ClientID được tạo của txtTitle:

$('<%= txtTitle.ClientID %>')

Điều này sẽ dẫn đến ...

$('ctl00$ContentBody$txtTitle')

... khi trang được hiển thị.

Lưu ý: Trong Visual Studio, Intellisense sẽ mắng bạn vì đã đưa các thẻ ASP vào JavaScript. Bạn có thể bỏ qua điều này vì kết quả là JavaScript hợp lệ.


4
OP không có 'ctl00$ContentBody$txtTitle', anh ta có 'txtTitle', bạn đang thiếu vị trí dẫn đầu #để khớp với id. Nhưng OP đã từ chối một đề xuất tương tự (kể từ khi bị xóa): Điều này sẽ không hoạt động trừ khi tôi đưa Javascript của mình trực tiếp vào phần đánh dấu, đây là một cơn ác mộng của tổ chức. Tách hành vi là rất quan trọng cho dự án này.
Martijn Pieters

1

Thử cái này:

<asp:HiddenField ID="0858674_h" Value="0" runat="server" />

var test = $(this).find('[id*="_h"').val();

0

Để tìm id id iframe kết thúc bằng "iFrame" trong một trang có chứa nhiều iframe.

jQuery(document).ready(function (){     
                  jQuery("iframe").each(function(){                     
                    if( jQuery(this).attr('id').match(/_iFrame/) ) {
                            alert(jQuery(this).attr('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.