优化JavaScript / jQuery函数以获得更好的性能

时间:2018-03-06 10:28:38

标签: javascript jquery performance

我有以下功能:

    // Change nav item in header in order to display it shorter
    function toggleInnerHtml(){
        $('#header .top ul li span, .banner nav.company li a span').each(function(index, value){

            var nav_item_text = value.innerHTML;

            for (i = 0; i < nav_item_text.length; i++) { 
                if(nav_item_text == 'Häufig gestellte Fragen (FAQ) - Übersicht' ){
                    nav_item_text = 'FAQ';
                    this.innerHTML = nav_item_text;
                 }
            }

        });         
    }

    toggleInnerHtml();

该功能进入我页面的标题,并将菜单项“HäufiggestellteFragen(FAQ) - Übersicht”的名称更改为“FAQ”。但是,这个功能运行得太慢,所以“HäufiggestellteFragen(FAQ) - Übersicht”总是出现在“FAQ”出现之前。

有没有办法优化我的功能,以便不再出现此错误?不幸的是,我必须以这种方式解决它,因为我的CMS根据CMS中的页面名称生成菜单项。

2 个答案:

答案 0 :(得分:1)

不需要.each内的for循环。

function toggleInnerHtml(){
    $('#header .top ul li span, .banner nav.company li a span').html(function(){
       if($(this).html() === 'Häufig gestellte Fragen (FAQ) - Übersicht' )
          return "FAQ";
       return $(this).html();
    });         
}

这应该更快。

您可能仍会看到旧文本的闪烁,因为它将首先渲染,以便修复您应该考虑使用一些CSS来隐藏文本,然后在文本更改后显示它。

答案 1 :(得分:1)

您可以使用contain 试试这个:

var elm = $(".banner nav.company li a span:contains('Häufig gestellte Fragen (FAQ) - Übersicht')");

elm.text("FAQ");

 elm = $("#header .top ul li span:contains('Häufig gestellte Fragen (FAQ) - Übersicht')");
elm.text("FAQ");