Можно ли смешивать несколько селекторов и фильтров с помощью jQuery? - PullRequest
1 голос
/ 04 декабря 2011

Я знаю, что есть возможность, используя jQuery, смешивать Multiple Selector с Multiple Attribute Selector , и, действительно, я использовал это.Например, это прекрасно работает:

$('input[type="checkbox"][name^="selected"]:checked', theForm).length

В моем примере «theForm» - это строка, содержащая «# form1», которую я использую для ссылки на мою форму с атрибутом id = «form1».

Что ж, вопрос заключается в следующем: возможно ли смешивание вышеизложенного с фильтром jQuery?Вот пример кода:

var myVar = $('input[name^="modcc_"]', myForm).filter(...)

Я пытался использовать это, и мне кажется, что я не получаю элементы в myVar, но если я просто удаляю "myForm" таким образом

var myVar = $('input[name^="modcc_"]').filter(...)

, это работает... ЗАЧЕМ?Я делаю что-то неправильно?Я точно знаю, что переменная «myForm» правильно «заполнена» (это строка, содержащая «#formMod», которая совпадает с атрибутом id моей формы), и я уверен, что входные данные находятся внутри этой формы, и что это единственное, что имеет этот идентификатор.

Спасибо за вашу помощь!

PS Этот вопрос возник из одного из моих предыдущих ответов, который я сделал в комментарии к принятому ответу на этот вопрос , который не получилответил.Я думал, что в любом случае это может быть заслужено быть вопросом вместо простого комментария, так что ... вот оно!Надеюсь получить ответ на него ...

- отредактируйте, как я просил, я поставил здесь HTML-код формы:

<form action="..." method="post" id="formMod" name="formMod">
   <input type="hidden" name="catid" value="412" />
   <td width="8%">412</td>
   <td>myName</td>
   <td width="9%" style="white-space:nowrap; background-color:LightGoldenRodYellow;">
       <input id="modcc_icv" name="modcc_icv" type="text" value="10" maxlength="3" size="4" />.
       <input id="modcc_dcv" name="modcc_dcv" type="text" value="25" maxlength="2" size="3" />%
   </td>
   <td width="18%" class="actions_col" style="background-color:LightGoldenRodYellow;">
       [ <a href="...">Annnulla</a> ] 
       <input type="submit" name="confirmMod" value="Salva" />
   </td>
</form>

Ответы [ 2 ]

1 голос
/ 04 декабря 2011

Проблема в том, что вы используете недопустимую разметку.

У вас не может быть элемента <form> в качестве прямого потомка элемента <tr>.

Ваш HTML будетмогут быть переработаны различными способами в зависимости от браузера, и элементы <td> и их содержимое, вероятно, будут удалены из form, так что <td> s являются потомками <tr>.

Когда я помещаю вашу разметку в Chrome, она выглядит так:

<tr>
      <!-- THE FORM HAS LOST ITS CONTENT -->
   <form action="..." method="post" id="formMod" name="formMod"></form>

   <input type="hidden" name="catid" value="412">
   <td width="8%">412</td>
   <td>myName</td>
   <td width="9%" style="white-space:nowrap; background-color:LightGoldenRodYellow;">
       <input id="modcc_icv" name="modcc_icv" type="text" value="10" maxlength="3" size="4">.
       <input id="modcc_dcv" name="modcc_dcv" type="text" value="25" maxlength="2" size="3">%
   </td>
   <td width="18%" class="actions_col" style="background-color:LightGoldenRodYellow;">
       [ <a href="...">Annnulla</a> ] 
       <input type="submit" name="confirmMod" value="Salva">
   </td>

</tr>

Обратите внимание, что элемент <form> теперь пуст.

Поэтому вы можете найтиэлементы <input> выполняют поиск по всему документу, но не из контекста самой формы.

Так что это не имеет ничего общего с .filter(), а скорее с тем фактом, что вы не выбираетелюбые элементы на первом месте.

0 голосов
/ 04 декабря 2011

Вы уверены, что неправильно используете myForm вместо theForm?

При этом с синтаксисом селектора $(foo,bar) вы выбираете foo элементов в контексте bar. Если установка myForm в качестве контекста не приводит к вашим результатам (при выборе без него), это обычно означает, что вы выбираете не в том контексте, или что просто нет элементов, соответствующих вашему селектору в данный контекст.

Вот еще немного прочтения об этом .

...