我不知道为什么但是jquery的not()
方法为两个独占的不同测试返回相同的值。
查找
<script language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script language="javascript">
$(function() {
$(':button, :submit').filter(function() {
$('#result').append('tag = ' + $(this)[0].tagName + "<br />");
$('#result').append('.not(\':submit\').length = ' + $(this).not(':submit').length + "<br />");
$('#result').append('.not(\':button\').length = ' + $(this).not(':button').length + "<br />");
$('#result').append('.is(\':button\') = ' + $(this).is(':button') + "<br /><br />");
});
});
</script>
<button>Btn1</button>
<input type="button" value="Btn2" />
<input type="submit" />
<div id="result">
</div>
结果如下:
tag = BUTTON
.not(':submit')。length = 0
.not(':button')。length = 0
.is(':button')= true
tag = INPUT
.not(':submit')。length = 1
.not(':button')。length = 0
.is(':button')= true
tag = INPUT
.not(':submit')。length = 0
.not(':button')。length = 1
.is(':button')= false
发现了一个错误?
答案 0 :(得分:1)
不,这是设计的。对于button
元素的特定情况,:submit
过滤器和:button
过滤器均为true。默认情况下,button
元素具有submit
类型(see the MDN docs)。
答案 1 :(得分:0)
我认为你感到困惑
.not(':submit').length = 0
.not(':button').length = 0
您的假设是错误的,您的测试不独占。 jQuery文档声明:
:button
:选择所有按钮元素和 type 按钮的元素。
:submit
:选择 type 提交的所有元素。
现在,它恰好是button
个元素have a type
attribute,默认值是submit
。
type = submit | button | reset [CI]
此属性声明按钮的类型。可能的值:
- submit:创建一个提交按钮。这是默认值。
- reset:创建一个重置按钮。
- 按钮:创建一个按钮。
所以jQuery会返回正确的结果。 not(:button).length
返回0
,因为我们正在处理button
元素。 not(:submit).length
返回0
,因为该按钮元素为type
属性,其值为submit
。
答案 2 :(得分:0)
将过滤器(function(){})更改为每个(function(){})然后你可能很幸运。