是否可以使用jQuery混合多个选择器和过滤器?

时间:2011-12-04 10:27:32

标签: jquery jquery-selectors filter attributes

我知道有可能使用jQuery来mix Multiple Selector with 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属性一致)并且我确信输入在该表单内部并且它是唯一具有该ID的内容

感谢您的帮助!

P.S。 这个问题来自one of my previous I made in a comment to the accepted answer to this question但没有得到答案。我认为它无论如何都应该成为一个问题,而不是一个简单的评论,所以...在这里!希望得到答案......

- 编辑 如我所知,我在这里放置了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 个答案:

答案 0 :(得分:1)

问题是您使用的是无效标记。

您不能将<form>元素作为<tr>元素的直接子元素。

您的HTML将根据浏览器以各种方式进行返工,<td>元素及其内容可能会从form中删除,以便<td>为子项<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()无关,而是与你首先没有选择任何元素的事实有关。

答案 1 :(得分:0)

您确定没有错误地使用myForm代替theForm吗?

话虽如此,您使用$(foo,bar)选择器语法执行的操作是在foo上下文中选择bar个元素。如果将myForm设置为上下文不会产生结果(在没有它的情况下进行选择时),这通常意味着您要么选择了错误的上下文,要么就是没有任何元素与您的选择器匹配在给定的背景下。

这是some more reading about it