Замітні знаки в селекторах jQuery


668

Я намагаюся використовувати підстановку, щоб отримати ідентифікатор усіх елементів, ідентифікатор яких починається з "jander". Я спробував $('#jander*'), $('#jander%')але не виходить ..

Я знаю, що я можу використовувати класи елементів, щоб вирішити це, але це також можливо, використовуючи символи ??

<script type="text/javascript">

  var prueba = [];

  $('#jander').each(function () {
    prueba.push($(this).attr('id'));
  });

  alert(prueba);


});

</script>

<div id="jander1"></div>
<div id="jander2"></div>

2
Це питання про jQuery (а точніше двигун Sizzle).
Пітер Ернехольм

1
Лише зауваження: Це було б набагато швидше зробити це з класами, оскільки jQuery або Sizzle можуть використовувати функції браузера (хоч це не має великої різниці для сучасних браузерів).
Фелікс Клінг


7
Також важливо зауважити, що $("[id*=jander]")вибирали б усі елементи з ідентифікатором, що містить рядковий jander.
Габріель Райан Нахміас

Відповіді:


1279

Щоб отримати всі елементи, що починаються з "jander", ви повинні використовувати:

$("[id^=jander]")

Щоб отримати ті, що закінчуються на "jander"

$("[id$=jander]")

Дивіться також документацію JQuery


22
Документи наводять такий приклад:$('input[name^="news"]').val('news here!')
Бренден

5
Код працює за призначенням. Не потрібно подвоювати котирування, це просто збільшує шанси пропустити кінцеву цитату і робить її менш читаною.
nico

4
@nico Досить цікаво, що документи говорять про те, що він працює з атрибутами і idє технічно властивістю , але, мабуть, з останніми випусками jquery (тобто 1.9) і тим, як останні зміни в атрибутах і властивостях виконуються, рядок трохи розмивається по відношенню до двох і тому ви можете використовувати селектори атрибутів для (принаймні деяких) властивостей.
Johnt предприниматель

Що робити, якщо я хочу вибрати рівний з вибраних. Наприклад: у мене зараз є, .col-lg-4:even div:nth-child(1)якби я хотів зробити те саме .... що б я написав? "[class^=.col-lg-]:even"? (Я, здається, не спрацьовує)
Луїс Роблз

Трохи поведінки, яка мене здивувала ---- якщо я використовую це з "class $ = ...", він шукає список класів предмета, а не окремі назви класів. Тож він потрапляє лише в тому випадку, якщо шуканий клас є останнім класом на цьому елементі. Не перевірений, окрім Chrome. І не впевнений, чи є недолік у jQuery чи у моїх очікуваннях від jQuery.
Роджер Крюгер

115

Оскільки назва пропонує підстановку, ви також можете скористатися цим:

$(document).ready(function(){
  console.log($('[id*=ander]'));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="jander1"></div>
<div id="jander2"></div>

Це дозволить вибрати даний рядок в будь-якій точці id.


39

Спробуйте починати jQuery

селектор, '^ =', напр

[id^="jander"]

Мені потрібно запитати, чому ви не хочете робити це за допомогою класів?


2
Щоб додати контекст, я шукаю те саме рішення, оскільки я використовую Django, клас ModelForm диктує ідентифікатори на основі моделей, і, здається, не дозволяє групуватись так; тобто HTML поза моїм контролем.
Крістіан Манн

Це корисно під час роботи з ASP.Net WebForms, зокрема зі списками радіо та прапорців.
DavidScherer

35

для занять можна використовувати:

div[class^="jander"]

Я не міг змусити це працювати, отримати повідомлення про недійсний синтаксис.
stian

14

Щоб отримати ідентифікатор з підстановки підказки:

$('[id^=pick_]').click(
  function(event) {

    // Do something with the id # here: 
    alert('Picked: '+ event.target.id.slice(5));

  }
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="pick_1">moo1</div>
<div id="pick_2">moo2</div>
<div id="pick_3">moo3</div>


2
Замість "event.target.id" це також може працювати: $ (this) .attr ("id")
PJ Brunet

10

Коли у вас складніший рядок id, подвійні лапки є обов'язковими.

Наприклад, якщо у вас є такий ідентифікатор:, id="2.2"правильний спосіб отримати доступ до нього:$('input[id="2.2"]')

Максимально використовуйте подвійні лапки з міркувань безпеки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.