不确定这是否可行或我只是没有正确地写它:
}).on("change", function (e) {
$("#searchForm:not('#locationName') :input").prop("disabled", true);
});
#searchForm
是整个表单的ID
#locationName
是我想要排除的特定输入的ID(不仅仅是这个,但这只是一个例子)
我想要排除多个输入ID以及表单中的大量列表,所以我不希望逐个禁用它们...我想尽可能使用not()选择器
我已经尝试了几种不同的方式来编写它,但似乎无法使其正常工作。
答案 0 :(得分:3)
#searchForm
是整个表单的ID
#locationName
是我要排除的特定输入的ID
在这种情况下,:not
应位于:input
,而不是#searchForm
:
.on("change", function (e) {
$("#searchForm :input:not('#locationName')").prop("disabled", true);
});
答案 1 :(得分:2)
您当前的代码在#searchForm
元素中查找也不是#locationName
元素的输入。由于元素只能有一个ID,因此没有意义。您正在将:not
应用于错误的元素。
您的意思是将:not
放在:input
伪类上。
$("#searchForm :input:not(#locationName)").prop("disabled", true);
另请注意,:not
中的seletor周围不需要引号。
如果要排除多个元素,请记住在构建复合选择器时,它是AND,因此请使用多个:not
s:
$("#searchForm :input:not(#locationName):not(#somethingElse)").prop("disabled", true);
实际上,说过,我从the jQuery documentation看到他们扩展:not
以允许群组选择器:
// Only valid with jQuery
$("#searchForm :input:not(#locationName, #somethingElse)").prop("disabled", true);
not valid in CSS只允许simple selectors,这是一个jQuery扩展(如:input
)。通过使用jQuery扩展,您可以强制jQuery使用其Sizzle引擎处理选择器本身,而不是将浏览器转移到显着更高效的内置引擎,但在大多数情况下,速度的差异并不重要。
或者,您可以使用.not
function:
// Only valid with jQuery
$("#searchForm :input").not("#locationName, #somethingElse").prop("disabled", true);