Итерация по строке и добавление тегов с использованием JavaScript - PullRequest
1 голос
/ 02 ноября 2010

Я работаю над проектом веб-сайта, и у меня есть параграф, содержащий список элементов (он будет отлично работать как ul, но должен остаться p), который должен иметь первую букву каждого пункт жирный . Я создал функцию для этого:

function inserter(string, splitter, skip) {
    var array = string.split(splitter);
    var len = array.length;

    for(var i = 1; i < len; i++) {
        var a = array[i];
        var b = '<b>';
        var c = '</b>';
        if(a.substr(0, 3) != skip){ 
            array[i] = splitter + b + a.substr(0,1) + c + a.substr(1);
        } else { 
            array[i] = splitter + a; 
        }
    }
    var strFix = array.join("");
    return strFix;
}

$(function(){
    var text = $(".caps").html();
    text = inserter(text, ': '); //bold the item after ': '
    text = inserter(text, ', ', 'and'); // now bold after the comma ', ' and the skip variable which matches first three letters so the last and doesn't get bold
    text = inserter(text, ', and '); //now for the item after the last 'and'
    $(".caps").html(text);
});

Но его нужно вызывать и повторять строку для каждого отдельного сплиттера (что может ухудшить производительность на страницах с более чем несколькими из них), и мне интересно, как я могу просто вызвать его один раз, чтобы все сплиттеры смотрел за одну итерацию?

Пример страницы:

http://heidikratzke.com/about.php

Когда вы увидите страницу, вы увидите, что я буду делать это в нескольких абзацах в слайд-шоу jQuery.

Если это не покажет, что это повлияет на производительность медленных браузеров, я оставлю все как есть.

Ценю любые предложения о том, как сделать это лучше.

1 Ответ

2 голосов
/ 02 ноября 2010

Одна оптимизация, которую вы можете сделать, - это использовать разделитель, который вы используете, чтобы разбить строку на массив, чтобы присоединиться к массиву после завершения операции:

function inserter(string, splitter, skip) {
    var array = string.split(splitter);
    var len = array.length;

    for(var i = 1; i < len; i++) {
        var a = array[i];
        var b = '<b>';
        var c = '</b>';
        if(a.substr(0, 3) != skip){ 
            array[i] = b + a.substr(0,1) + c + a.substr(1);
        } else { 
            array[i] = a; 
        }
    }
    return array.join(splitter);

}

Возможно, вы могли бы сделать и здесь больше, но это выскочило на меня.

дальнейшая оптимизация

Следующее получает объявление переменной из цикла:

function inserter(string, splitter, skip) {
    var array = string.split(splitter);
    var len = array.length;
    var i, a, b='<b>', c='</b>';

    for(i = 1; i < len; i++) {
        a = array[i];
        if(a.substr(0, 3) != skip){ 
            array[i] = b + a.substr(0,1) + c + a.substr(1);
        } else { 
            array[i] = a; 
        }
    }

    return array.join(splitter);    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...