如何检测<li>中的第一个nodeType是nodeType 1后跟nodeType 3?

时间:2016-04-29 20:16:16

标签: javascript jquery

我正试图找到一种方法来检测超链接是否是<li>的第一个节点。

例如,如果我有:

<ul>
    <li><a href="file.pdf">hyperlink</a> Text text text text...</li>
    <li>Text text text text <a href="file.pdf">hyperlink</a>...</li>
</ul>

我需要找到一种方法来检测<li>中的第一个元素/节点是PDF的链接。如果超链接位于nodeType 3(文本)之后,则不应通过验证。

鉴于此,我想要完成的是通过使用以下内容为<li>带有超链接的统计数据分配一个类:

.closest('li').addClass('myclass');

到目前为止,我得到的是:

$('li').contents().filter(function() {
    return this.nodeType === 1;
}).closest('li').addClass('myclass');

哪不符合我的要求。

我该如何做到这一点?

2 个答案:

答案 0 :(得分:2)

目前,您正在根据任何节点是否nodeType 1来过滤内容,这将收集li li秒。听起来你想要找到第一个节点是否是一个链接,你需要为每个 $('li').filter(function(idx, li) { return $(li).contents().first().is('a'); }).addClass('myclass');找到它。

&#13;
&#13;
.myclass {
  color: red;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul>
  <li><a href="file.pdf">hyperlink</a> Text text text text...</li>
  <li>Text text text text <a href="file.pdf">hyperlink</a>...</li>
</ul>
&#13;
uint32
&#13;
&#13;
&#13;

答案 1 :(得分:0)

所以要掩盖:

<li><strong><a href="file.pdf">hyperlink</a> Text text text text...<strong></li>

如果文件扩展名为大写(PDF),我还可以执行以下操作吗?

$('li, li > strong').filter(function(idx, li) {
    return $(li).contents().first().is(
        'a[href$=".pdf"], a[href$=".PDF"]',
        'a[href$=".jpg"], a[href$=".JPG"]'
    );
}).closest('li').addClass('li');

我还必须添加.closest('li')才能使其适用于以超链接开头的其他<li>

谢谢大家的帮助!