javascript - 选择无序列表中链接内跨度内的文本...然后替换它

标签 javascript jquery html

这是我关注的 HTML:

<nav>
    <ul id='nav'>
        <li><a href="index.php" class='top'><icon><img src="images/home-icon.png"></icon>Home<span> +</span></a></li>
        <li><a href="skillsets.php"><icon><img src="images/skills-icon.png"></icon>Skillsets</a></li>
        <li><a href="gallery.php"><icon><img src="images/gallery-icon.png"></icon>Gallery</a></li>
        <li><a href="about.php"><icon><img src="images/about-icon.png"></icon>About</a></li>
        <li><a href="contact.php" style='border-right:1px solid black;'><icon><img src="images/contact-icon.png"></icon>Contact</a></li>
    </ul>
</nav>

我想选择范围内的文本 - 最好只选择范围内文本的“+”部分(不带空格)。我现在尝试执行此操作的方法是使用以下代码:

$(document).ready(function(){
    var ul = $('nav > ul'),
        li = ul.children('li'),
        top = li.find('a').hasClass("top"),
        navSpan = $(top).children('span');
    $(navSpan).contents().replaceWith(' -');
});

但它没有正确选择元素。根据我设置 javascript 的方式(还有比这更多的内容),我需要保留这些变量。但是,其中一些变量似乎未正确设置,或者我的 $(navSpan).contents().replaceWith() 命令设置不正确。你们对如何修复它有什么想法吗?谢谢!

最佳答案

首先,让我们修复您的选择器和双重包装:

$(function(){
    var ul = $('#nav'),
        li = ul.children('li'),
        top = li.find('a.top'), // you can remove the 'a' qualifier if there is never another item with the top class
        navSpan = top.children('span');

其次......您可以将内容替换为:

    navSpan.text(' -');
});

最终代码:

$(function(){
    var ul = $('#nav'),
        li = ul.children('li'),
        top = li.find('a.top'),
        navSpan = top.children('span');

    navSpan.text(' -');
});

我对这个例子中不必要的变量数量感到有点畏缩,但你说你需要所有这些变量,所以我不会尝试进一步优化。

编辑:无法抗拒优化一点。即使您需要捕获所有这些变量,使用 id 进行查询也会比使用 nav > li 更快。如果您有多个适用于此的菜单,则可以忽略,但如果没有,则速度会更快一些。

Here is a jsFiddle of the working code.

关于javascript - 选择无序列表中链接内跨度内的文本...然后替换它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22276762/

相关文章:

javascript - TinyMCE 添加 "\n"以及 <p>

javascript - 使用新计算器克隆 div 以获得新 div

Javascript 匹配在 IE 中不起作用

javascript - jquery.find() 可以只选择直接 child 吗?

javascript - 过滤具有特定类作为祖先的元素

jquery - 我可以使用变量显示通过 animate() 增加的 div 的宽度吗?

javascript - 部分 View 和 jQuery 图形问题

javascript - 单击按钮并在同一页面上显示 JavaScript 函数

javascript - 根据屏幕高度计算边距

javascript - 如何指定输入元素中允许的最大字符数 - 设置 maxlength 属性是否足够?