如何返回没有,空或空格id的元素?

时间:2013-01-16 16:44:08

标签: javascript jquery html

我正在重新配置包含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/

3 个答案:

答案 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; }