3

我有一个带有链接和子链接的无序列表。我想'»'在列表中的子链接前面添加一个字符。我可能可以通过 CSS 来做到这一点,list-style-image:url但我宁愿只有文本。到目前为止,我已经尝试了 prepend,但没有取得多大成功。

HTML:

<nav>
<ul>
    <li><a href="#">link 1</a></li>
    <li><a href="#">link 2</a></li>
    <ul>
        <li><a href="#">sublink link 1</a></li>
        <li><a href="#">sublink link 2</a></li>
    </ul>
    <li><a href="#">link 3</a></li>
</ul>
</nav>

我正在使用这段代码:

 $("ul li li").each(function() {
    $(this).closest('li').prepend("»").html();
   });

如果我删除一级列表项并将其添加到所有列表项,那么它可以工作,但在网络检查器中查看,»角色周围仍然有引号。我还尝试了最接近的东西的各种化身,li a但也没有什么不同。我没有收到任何语法错误,所以不确定我做错了什么。

这里有一个小提琴

4

5 回答 5

4

为什么不是一些CSS?

ul ul li:before {
 content: '»';   
}

使用 JavaScript 来修改 UI 是一种资源浪费。这是主观的,不知道您的实际用例。

于 2012-09-17T22:01:57.947 回答
3

您的选择器不正确,也没有必要使用htmleach方法。

$("ul ul li").prepend("»");
于 2012-09-17T22:02:08.773 回答
3

你有一个不正确的选择器ul li li,暗示有一个li直接在一个内,li但在两者之间有另一个ul

此外,您不需要使用 a .each,因为 jQuery 将返回对匹配选择器的元素集的引用。

$("ul ul li").prepend("»");

演示

请注意,CSS 解决方案Aknosis看起来非常酷。

于 2012-09-17T22:05:09.467 回答
1

我认为这就是您所需要的:

 $("ul ul li").prepend("» ");
于 2012-09-17T22:03:35.853 回答
0

尝试:

 $("ul li").each(function() {
    $(this).prepend("»").html();
 });
于 2012-09-17T22:02:15.700 回答