Есть несколько очевидных проблем с вашим кодом:
- В вашем
i
, где cnt < wrd_pr_linr
равно false, вы сбрасываете счетчик и оборачиваете промежуток вокруг текущего atxt
, но ничего не делаете с txt[i]
, поэтому он пропущен как приращение увеличивается на следующем обороте. Вы можете исправить это, добавив i--;
после cnt++;
.
- Если ваш цикл завершается, а
cnt < wrd_pr_linr
имеет значение true, ваш оператор else, который создает строку DOM, не будет выполнен, а значение atxt
просто игнорируется. Вам нужно запустить тот же блок кода, когда ваш оператор if собирается завершиться.
Если бы это был я, я бы нашел гораздо более простое решение на основе регулярных выражений:
function set_padd(){
var f_txt;
var tt = document.getElementById("span_padding").innerHTML;
// replace every third space with "{!BREAK!}"
tt = tt.replace(/(.*?\s+.*?\s+.*?)\s+/g, "$1{!BREAK!}");
// Splitting on that string creates an array with 3 words in each index
tArr = tt.split("{!BREAK!}");
// Join the array again with the HTML you need between each index
f_txt = tArr.join('</a><br/><a class="padd_txt">');
// Wrap the text with the start tag and the end tag
f_txt = '<a class="padd_txt">' + f_txt + '</a>';
// Viola!
document.getElementById("span_padding").innerHTML = f_txt;
}
Извлеките комментарии, обменяйте регулярное выражение на что-то похожее на bobince's , и вы можете получить его очень маленьким:
function set_padd(){
var tt = document.getElementById("span_padding").innerHTML;
var f_txt = '<a class="padd_txt">'
+ tt.match(/\S+(\s+\S+){0,2}/g)
.join('</a><br/><a class="padd_txt">')
+ '</a>';
document.getElementById("span_padding").innerHTML = f_txt;
}