我正试图找到一种方法来检测超链接是否是<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');
哪不符合我的要求。
我该如何做到这一点?
答案 0 :(得分:2)
目前,您正在根据任何节点是否nodeType
1
来过滤内容,这将收集li
li
秒。听起来你想要找到第一个节点是否是一个链接,你需要为每个 $('li').filter(function(idx, li) {
return $(li).contents().first().is('a');
}).addClass('myclass');
找到它。
.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;
答案 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>
。
谢谢大家的帮助!