Найти все текстовые поля, где идентификатор не содержит определенных символов - PullRequest
4 голосов
/ 09 февраля 2012

У меня есть следующий код, и я пытаюсь получить текстовые поля, где id не содержит слова OT.

<input type="text" id="txtMo1">
<input type="text" id="txtOTMo1">
<input type="text" id="txtTu1">
<input type="text" id="txtOTTu1">
...
...
<input type="text" id="txtMo4">
<input type="text" id="txtOTMo4">
<input type="text" id="txtTu4">
<input type="text" id="txtOTTu4">
...
...

Я пытался использовать .find, где id начинается с txt, но это дает мне все (очевидно). Как получить только те текстовые поля, где идентификатор начинается с txt, но не содержит OT?

.find("input[id ^= 'txt']")

Ответы [ 2 ]

6 голосов
/ 09 февраля 2012

Не используйте селектор: используйте filter:

.find('input[id^="txt"]').filter(function() {
    return -1 === this.id.indexOf('OT');
});

Обратный вызов filter должен возвращать true, если элемент должен быть сохранен, и false, если он должен быть удален. В этом случае функция вернет true, и элемент будет сохранен, если indexOf вернет -1, что означает, что OT отсутствует.

2 голосов
/ 09 февраля 2012

Почему бы вам не использовать класс вместо этих конкретных текстовых полей и вместо этого использовать селектор класса?

Но все же, если вам нужно решение, вот оно.

$('input[id^-"txt"]').filter(function() {
    return this.id.indexOf('OT') == -1;
});

Выможет сделать вашу метку примерно такой и сделать ваш код простым.

Разметка

<input type="text" id="txtMo1">
<input type="text" class="OT" id="txtOTMo1">
<input type="text" id="txtTu1">
<input type="text" class="OT"id="txtOTTu1">

Js

$('input.OT').doYourStuff();
...