Селектор jQuery: идентификатор заканчивается?

Есть ли selector, который я могу запросить для элементов с идентификатором, заканчивающимся заданной строкой?

Скажем, у меня есть элемент с идентификатором ctl00$ContentBody$txtTitle. Как я могу получить это, передав просто txtTitle?


person Josh Stodola    schedule 04.03.2009    source источник
comment
Старый добрый ID мастер-страницы искажен!   -  person Matthew Lock    schedule 27.10.2011
comment
Установите ClientIDMode=static начиная с ASP.Net 4.0 и избавьтесь от этого :)   -  person Murali Murugesan    schedule 27.09.2013
comment
ClientIDMode = static не подойдет тем, кто пытается найти элемент в репитере!   -  person Stuart    schedule 31.10.2014


Ответы (9)


Если вам известен тип элемента, то: (например: замените element на div)

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

Если вы не знаете тип элемента:

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

Доступна дополнительная информация


// the old way, needs exact ID: document.getElementById("hi").value = "kk";
$(function() {
  $("[id$='txtTitle']").val("zz");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="ctl_blabla_txtTitle" type="text" />

person Mark Hurd    schedule 04.03.2009
comment
Я бы поискал его, оканчивающийся на «$ txtTitle». Это не такой уж большой риск с префиксом txt, но если вы выберете NameTextBox, он будет соответствовать NameTextBox, FirstNameTextBox, LastNameTextBox и т. Д. - person Mark; 20.03.2009
comment
Анонимный пользователь только что попытался отредактировать следующее в. Добавление его в качестве комментария (как кажется, имеет смысл): Это не дает элементов, оканчивающихся на id txtTitle. Вот документы: api.jquery.com/element-selector .. селектор элементов эквивалентен из getElementsByTagName. Это не имеет ничего общего с идентификатором элемента. Если вы хотите получить доступ к элементам, заканчивающимся на id, используйте этот синтаксис $ ([id $ = 'txtTitle']) или если вы знаете тип элемента .. например. div .. затем используйте этот синтаксис $ (div [id $ = 'txtTitle']) - person Pekka; 13.02.2011
comment
Ссылка очень пригодилась. Не сама страница, но она разделилась на две дополнительные страницы, которые мне были нужны. Я научился захватывать сегменты заголовка, например, если идентификатор отображается как masterPage1_Control0_MyTableName_moreStuff в View Source, я могу заблокировать свою таблицу ‹asp: Table ID = MyTable ... с помощью $ (id * = MyTable]). Если подумать, мне больше нравится id $. Хм... - person Lukas; 09.10.2013
comment
Это найдет элемент document.getElementById("f:fTest:j_idt51:0:inpTest"). Это не $("[id$='inpTest']"). Это потому, что двоеточие не разрешено в идентификаторе (но JSF добавляет его!)? - person Panu Haaramo; 26.04.2014
comment
Есть ли способ использовать этот селектор с CSS, например псевдоселекторы? - person Alejandro Nava; 01.11.2016

Ответ на вопрос $("[id$='txtTitle']"), как ответил Марк Херд, но для тех, кто, как и я, хочет найти все элементы с идентификатором, который начинается с данной строки (например, txtTitle), попробуйте следующее (документ):

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

Если вы хотите выбрать элементы, идентификатор которых содержит заданную строку (doc):

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

Если вы хотите выбрать элементы, идентификатор которых не является заданной строкой (документ):

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

(он также соответствует элементам, у которых нет указанного атрибута)

Если вы хотите выбрать элементы, id которых содержит заданное слово, разделенное пробелами (документ):

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

Если вы хотите выбрать элементы, идентификатор которых равен заданной строке или начинается с этой строки, за которой следует дефис (doc):

$("[id|='myValue']")
person Romain Guidoux    schedule 03.05.2011
comment
Если вы добавите тот, который действительно отвечает на вопрос, то есть $ ([id $ = 'txtTitle']), и поставите его первым в списке, я проголосую за ваш ответ. Я не могу сейчас, потому что ты не отвечаешь на вопрос - person Alan Macdonald; 17.01.2013
comment
@AlanMacdonald Я не уверен, что правильно его добавлять. Я ответил на вопрос спустя много времени после того, как ответ был принят, просто для того, чтобы добавить больше информации для посетителей. Я надеюсь, что люди, которые проголосуют за мой ответ, также проголосуют за ответ на вопрос. - person Romain Guidoux; 17.01.2013
comment
@RomainGuidoux честно, это ваш звонок, но я не поддерживаю ответы, которые не предлагают решения заданного вопроса, потому что для новичков, испытывающих ту же проблему, что и OP, неочевидно, если они зайдут на страницу и есть вверх проголосовали за ответ, который даже не отвечает на вопрос. Если вы измените его, чтобы ответить на вопрос, я бы проголосовал за ваш ответ вместо принятого ответа, поскольку это более полный и полезный ответ. Эфир, который должен был быть комментарием к принятому ответу, а не ответом на вопрос. - person Alan Macdonald; 18.01.2013
comment
@AlanMacdonald Готово, вы меня убедили. - person Romain Guidoux; 18.01.2013

Пытаться

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

редактировать: с опозданием на 4 секунды: P

person kkyy    schedule 04.03.2009

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

Необязательно цитировать фрагмент текста, с которым вы сопоставляете

person Scott Evernden    schedule 20.03.2009
comment
Это должен быть правильный ответ! Использование и только сбивает с толку. - person Kees C. Bakker; 28.10.2011

Безопаснее добавлять символ подчеркивания или $ к искомому термину, чтобы с меньшей вероятностью совпадали другие элементы с тем же идентификатором:

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

(где element - это тип элемента, который вы пытаетесь найти, например div, input и т. д.

(Обратите внимание, вы предлагаете, чтобы в ваших идентификаторах были символы $, но я думаю, что .NET 2 теперь имеет тенденцию использовать вместо этого символы подчеркивания, поэтому в моем примере используется подчеркивание).

person Nick Gilbert    schedule 14.05.2009
comment
Да ты прав. Свойство ID использует подчеркивание. Свойство Name использует знак доллара. - person Josh Stodola; 14.05.2009

Пример: чтобы выбрать все <a> с идентификатором, заканчивающимся на _edit:

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

or

jQuery("a[id$='_edit']")
person Anton Kraievyi    schedule 22.07.2010

Поскольку это ASP.NET, вы можете просто использовать тег ASP ‹% =%> для печати сгенерированного ClientID txtTitle:

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

Это приведет к ...

$('ctl00$ContentBody$txtTitle')

... когда страница отображается.

Примечание. В Visual Studio Intellisense будет кричать на вас за добавление тегов ASP в JavaScript. Вы можете проигнорировать это, так как результатом будет правильный JavaScript.

person Michael    schedule 19.10.2012
comment
OP не имеет 'ctl00$ContentBody$txtTitle', у него есть 'txtTitle', и, вам не хватает ведущего # для соответствия идентификатору. Но OP уже отклонил подобное предложение (с момента его удаления): Это не сработает, если я не помещу свой Javascript прямо в разметку, что является кошмаром организации. Поведенческое разделение имеет решающее значение для этого проекта. - person Martijn Pieters; 19.10.2012

Попробуй это:

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

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

Чтобы найти идентификатор iframe, заканчивающийся на «iFrame», на странице, содержащей множество окон iframe.

jQuery(document).ready(function (){     
                  jQuery("iframe").each(function(){                     
                    if( jQuery(this).attr('id').match(/_iFrame/) ) {
                            alert(jQuery(this).attr('id'));

                     }                   
                  });     
         });
person neelmeg    schedule 06.12.2011