你怎么做querySelector没有属性

时间:2015-04-23 00:04:01

标签: javascript jquery-selectors attributes

给出了元素:

<link arbitrary="arbitrary">1st link</link>
...
<link>the link I want</link>
...

用于选择“我想要的链接”的querySelector()选择器是什么? 在“我想要的链接”之前或之后可能存在任意数量的具有任意属性的链接,这是唯一没有任何属性的元素。我不想循环遍历querySelectAll()列表。

[更新] querySelector不需要HTML元素,只需要普通的旧节点。 我正在处理从ATOM提要加载的XML DOM:

var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlSrc, "text/xml");
var xmlElem = xmlDoc.documentElement;
// fragment:
<feed>
 <entry>
    <link rel='replies' type='application/atom+xml' href='..' title='...'/>
    <link rel='replies' type='text/html' href='...' title='...'/>
    <link>the link I want</link>
    <link rel='self' type='application/atom+xml' href='...'/>
    <link rel='alternate' type='text/html' href='...' title='...'/>
  </entry>
<feed>

2 个答案:

答案 0 :(得分:0)

没有一个。

  

querySelector()方法返回与文档中指定的CSS选择器匹配的第一个元素。

因为没有任何关于该链接的具体内容,所以没有任何方法可以在重复链接的海洋中在DOM上引用它。

答案 1 :(得分:0)

您可以filter选择,在链接节点上查找空的attributes属性:

e.g。

var match = $xmlDOM.find('feed link').filter(function () {
    return this.attributes.length === 0;  // or !this.attributes.length
});

由于这也是关于jQuery XML解析的,你真的需要提供一个工作示例来测试这类问题。

更新

由于您特别需要一个查找具有/不具有属性的元素的选择器,您始终可以使用自定义伪选择器(如:hasattr

)扩展jQuery

e.g。

jQuery.extend(jQuery.expr[':'], {
    hasattr: function (el, index, selector){
        return el.attributes.length > 0;
    }
});

并与.find('link:not(:hasattr)')

一起使用