我正在重新配置包含100多个输入元素的复杂HTML文档。我想快速找到任何一个空白ID(<input type="text" name="something" id="" ...
),一个只有空格(<button name="unimportant" id=" "...
)的ID,或根本不知道(<select name="whatever">
的元素,以便我可以对来源进行必要的修正。
我知道空白id的选择器是$('[id=""]')
,但是如何使用一个选择器(或连接的选择器)获取所有目标元素?
示例HTML:
<form id="provision">
<input type="text" name="something" id="" value="blank id" /><br />
<input type="text" name="something2" value="no id" /><br />
<select name="something3"><option>No id</option></select><br />
<textarea name="something4" id="">Blank id</textarea><br />
<button name="something5" id=" ">whitespace id</button><br />
<button name="something6" id=" ">extra whitespace id</button><br />
<label><input type="radio" name="something7" id="
">Carriage return id</label>
</form>
有关添加红色边框(.css('border-color', 'red')
)的示例,请参阅http://jsfiddle.net/jhfrench/VNdL6/。
答案 0 :(得分:3)
用逗号分隔选择器:
$("[id=''], [id=' '], :not([id])").css("border-color", "red");
另一种选择是使用过滤:
$("[id]").filter(function() {
return $.trim(this.id) === "";
}).add(":not([id])").css("border-color", "red");
答案 1 :(得分:1)
您可以使用filter()过滤掉带有空白ID的元素,或者ID由空格组成。您可以根据需要在过滤函数中应用复杂过滤器。
$(':input').filter(function(){
if($.trim(this.id).length == 0)
return $(this);
}).css('border-color', 'red')
答案 2 :(得分:1)
为了避免无效ID的潜在问题,以及querySelector
或其jQuery等效的不可预测的行为,这可能会影响@ VisioN的解决方案,我可能会尝试类似
[].concat(document.getElementsByTagName("input")).forEach(function(elt){
if(elt.hasAttribute("id") && /^\s*$/.test(elt.getAttribute("id")) {
elt.removeAttribute("id");
}
});
或等效项,如果您不在ECMAScript5环境中。
这大致相当于@Adil正在做的事情,虽然它删除了无效的ID而不是仅仅设置它们的边框颜色属性。
然后可以使用CSS规则进行着色
input:not([id]) { border-color: red; }