javascript - 更高效的 jQuery 版本包含

标签 javascript jquery html

我有以下 JavaScript 和 jQuery,可以完美运行:

function updateTaskTypes(taskTypes) {

    $.each(taskTypes, function (idx, e) {

        var contains = $("#async_TaskTypes").find("a:contains('" + e + "')").length > 0;

        if (!contains) {

            var html = "<li><a href=\"#tab" + idx + "\">" + e + "</a></li>";

            $("#async_TaskTypes").append(html);
        }
    });
}

上面的代码接受一个字符串数组。目的是添加 <li>#async_TaskTypes如果它尚未包含一个。

HTML 的格式为:

<ul id="async_TaskTypes" class="tabs">
    <li><a href="#tab0">Preview Blog Comment</a></li>
    <li><a href="#tab1">Respond To Contact Us</a></li>
</ul>

我的问题是 jQuery 似乎没有达到应有的效率。有没有办法让上面的代码更加高效?

我所说的“高效”,是指也许我可以使用更直接的 jQuery 函数,或者更简洁的算法等......基本上是更优雅的代码。

最佳答案

在 DOM 中搜索总是效率低下。您应该有一个模型,用于存储哪些任务已在显示的列表中,以便您可以使用数组方法简单地搜索(如果排序,甚至可能在 O(n) 中进行搜索)。这可以做到,例如:

function updateTaskTypes(taskTypes) {
    var $ul = $("#async_TaskTypes"),
        texts = $ul.find("a").map(function(){
            return $(this).text();
        }).get();
    $.each(taskTypes, function (idx, e) {
        if ($.inArray(texts, e) == -1)
            $ul.append("<li><a href=\"#tab" + idx + "\">" + e + "</a></li>");
    });
}

或者您只需删除所有列表项并重新附加整个任务列表,这更简单,对于短列表可能更快:

function updateTaskTypes(taskTypes) {
    var $ul = $("#async_TaskTypes").empty();
    $.each(taskTypes, function (idx, e) {
        $ul.append("<li><a href=\"#tab" + idx + "\">" + e + "</a></li>");
    });
}

关于javascript - 更高效的 jQuery 版本包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15324183/

相关文章:

javascript - 如何获取我的整个 YouTube 观看历史记录?

javascript - 递归地使用javascript函数制作星形三 Angular 形

javascript - 检查文件扩展名是否与文档类型文件相关,例如 ".txt, .doc, .pdf, .psd, etc."

javascript - 绕一圈

javascript - Div 停止 javascript 函数

javascript - 滚动后更改对象颜色

Javascript InnerHTML 不适用于 DIV 中的 DIV

java - javascript 函数终止 session 后调用 servlet

javascript - 是否可以从粘贴在文本区域的 html 页面中找到此类标签​​,并将其标签替换为 javascript 代码中提到的其他标签?

javascript - 下拉选择后,存储选择并使用 mysql 数据库的结果刷新同一页面