jQuery Selector: Id заканчивается с?

339

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

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

  • 16
    старый добрый мастер страницы идентификация калечат!
  • 1
    Установите ClientIDMode=static из ASP.Net 4.0 и далее и избавьтесь от этого :)
Показать ещё 1 комментарий
Теги:
jquery-selectors

9 ответов

557
Лучший ответ

Если вы знаете тип элемента then: (например: замените '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" />
  • 9
    Я искал бы это, заканчивающееся '$ txtTitle'. Это не такой большой риск с префиксом «txt», но если вы выбираете «NameTextBox», он будет соответствовать «NameTextBox», «FirstNameTextBox», «LastNameTextBox» и т. Д.
  • 11
    Анонимный пользователь только что попытался отредактировать следующее в. Добавление его в качестве комментария (как кажется, имеет смысл): Это не дает элементы, заканчивающиеся на id txtTitle. Вот документы: api.jquery.com/element-selector ..element селектор эквивалентен getElementsByTagName. Это не имеет ничего общего с идентификатором элемента. Если вы хотите получить доступ к элементам, заканчивающимся на id, используйте этот синтаксис $ ("[id $ = 'txtTitle']") или, если вы знаете тип элемента ..eg div .., используйте этот синтаксис $ ("div [идентификатор $ = 'txtTitle'] ")
Показать ещё 4 комментария
240

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

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

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

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

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

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

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

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

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

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

$("[id|='myValue']")
  • 2
    Хорошие инструкции!
  • 0
    Отлично, решение
Показать ещё 5 комментариев
32

Try

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

edit: 4 секунды поздно: P

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

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

  • 0
    Спасибо что подметил это.
  • 1
    Это должен быть правильный ответ! Использование «и» только сбивает с толку.
13

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

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

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

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

  • 1
    Да ты прав. ID свойство использует подчеркивание. Имя свойства использует знак доллара.
3

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

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

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

$('ctl00$ContentBody$txtTitle')

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

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

  • 4
    У OP нет 'ctl00$ContentBody$txtTitle' , у него есть 'txtTitle' , и вы пропускаете ведущий # для соответствия идентификатору. Но OP уже отклонил подобное предложение (так как оно было удалено): это не сработает, если я не помещу свой Javascript прямо в разметку, что является организационным кошмаром. Поведенческое разделение имеет решающее значение для этого проекта.
3

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

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

или

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

Попробуйте следующее:

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

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

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

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

                     }                   
                  });     
         });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню