鉴于this JS Fiddle,有人能看出为什么会这样吗?如果查看控制台,您将看到元素ID及其标记名称列在:not method或.not方法下。请注意,从逻辑上讲,选择元素的语句应该产生相同的元素吗?好吧,出于某种原因:不是只返回2个元素,而是返回11(通过我的推算得到正确的数字)。
有人可以向我保证我的逻辑是正确的,这里有一个错误,或者在第一个声明中告诉我我做错了什么?
编辑:代码如下:
HTML:
<input id="TITLE" class="reginput" name="TITLE" type="TEXT" size="15" maxlength="15" value="test">
<input id="FIRSTNAME" class="reginput" name="FIRSTNAME" type="TEXT" size="30" maxlength="50" value="test">
<input id="SURNAME" class="reginput" name="SURNAME" type="TEXT" size="30" maxlength="80" value="test">
<input id="EMPNO" class="reginput" name="EMPNO" type="TEXT" size="30" maxlength="50" value="">
<select name="day_DOB" id="day_DOB" class="feday"><option value="0">Day</option></select>
<select name="month_DOB" id="month_DOB" onblur="dodatecheck_data_DOB(this,document.data.day_DOB,document.data.year_DOB,'MONTH');" class="femonth"><option value="0" selected="">Month</option></select>
<select name="year_DOB" id="year_DOB" onblur="dodatecheck_data_DOB(document.data.month_DOB,document.data.day_DOB,this,'YEAR');" class="feyear"><option value="0">Year</option></select>
<input class="reginput" id="HOMEPHONENO" maxlength="50" type="TEXT" name="HOMEPHONENO" size="15" value="">
<input class="reginput" id="WORKPHONENO" maxlength="50" type="TEXT" name="WORKPHONENO" size="15" value="">
<input class="reginput" id="MOBILEPHONENO" maxlength="50" type="TEXT" name="MOBILEPHONENO" size="15" value="">
<input id="JOBTITLE" class="reginput" name="JOBTITLE" type="TEXT" size="30" maxlength="100" value="">
<input id="COMPANYNAME" class="reginput" name="COMPANYNAME" type="TEXT" size="30" maxlength="100" value="">
<select id="CandGeneralField5" name="CandGeneralField5" class="reginput"><option value="0">< Please select ></option><option value="12">Female</option><option value="11">Male</option><option value="13">Prefer not to disclose</option></select>
jQuery(使用1.7.2):
$(document).ready(function() {
console.log(":not method");
$elems = $("input[type=text][id], select[id]:not(select#month_DOB, select#year_DOB), textarea[id], tr input[type=submit][id]");
$elems.each(function() {
console.log("\t" + $(this).attr("id") + " - " + this.nodeName.toLowerCase());
});
console.log("\tCount: " + $elems.length);
console.log(".not method");
$elems = $("input[type=text][id], select[id], textarea[id], tr input[type=submit][id]")
.not("select#month_DOB, select#year_DOB");
$elems.each(function() {
console.log("\t" + $(this).attr("id") + " - " + this.nodeName.toLowerCase());
});
console.log("\tCount: " + $elems.length);
});
编辑:为了澄清,我的逻辑是它应该在两种情况下都选择以下内容:
答案 0 :(得分:1)
它看起来像:不会采用链式选择器,例如:not(#id1, #id2)
。相反,您需要执行:not(#id1):not(#id2)
。
这是您的小提琴的修改版本:http://jsfiddle.net/jackwanders/EM5FP/
至于为什么它不会起作用,这可能是jQuery开发人员最好的问题。
答案 1 :(得分:1)
如果您将select[id]:not(select#month_DOB, select#year_DOB)
置于第一个位置,则可以使用
$elems = $("span#volumemaindetails")
.find("select[id]:not(select#month_DOB, select#year_DOB), input[type=text][id], textarea[id], tr input[type=submit][id]");
另见the updated example。请不要问我原因: - )
=== UPDATE ===
以下可以解释@jackwanders的答案:
来自negation pseudo-class的w3c css3定义:
否定伪类,:not(X),是一个功能符号,带有简单选择器(不包括否定伪 - 类本身)作为一个论点。
simple selector定义为:
一个简单的选择器 类型选择器,通用选择器,属性选择器,类选择器,ID选择器或伪类。
我会解释这样一个事实,即选择器(选择器组)或类型和id选择器的组合中不允许使用逗号。
jQuery not()方法允许比CSS3允许的更多。
(他们称之为功能;-))
答案 2 :(得分:1)