避免剥离标记

时间:2013-10-18 02:21:57

标签: jquery orphan

这个剧本让我发疯,它的主要特点是避免长篇章的孤儿。

一切都运行良好,直到我意识到如果我向<h1>(在这种情况下为<a href="#">)添加任何类型的标记,标记将被删除,因此链接将丢失。< / p>

这是当前的脚本:

$('h1').each(function() {
  var wordArray = $(this).text().split(' ');
  if (wordArray.length > 1) {
    wordArray[wordArray.length-2] += '&nbsp;' + wordArray[wordArray.length-1];
    wordArray.pop();
    $(this).html(wordArray.join(' '));
  }
});

这是simple demo

非常感谢任何指导。

谢谢,

2 个答案:

答案 0 :(得分:1)

$(this).html(wordArray.join(' '));  //Line causing the issue.

由于您替换html内的h1超链接已消失。

因此,不要定位h1,而是更改脚本以处理a标记,如下所示

$('h1 a').each(function() {
  var wordArray = $(this).text().split(' ');
  if (wordArray.length > 1) {
    wordArray[wordArray.length-2] += '&nbsp;' + wordArray[wordArray.length-1];
    wordArray.pop();
    $(this).html(wordArray.join(' '));
  }
});

选中此JSFiddle

答案 1 :(得分:1)

问题来自于您使用.text()函数来获取标头的内容。这会自动删除任何标记,只返回文本节点。您需要做的是获取HTML(使用.html()而不是.text()),然后检查最后一个单词末尾是否存在结束标记,以追加到您的标题元素的新内容:

$('h1').each(function() {
    var wordArray = $(this).html().split(' ');
    if (wordArray.length > 1) {
        wordArray[wordArray.length-2] += '&nbsp;' + wordArray[wordArray.length-1];

        var lastWord = wordArray.pop();
        lastWord = lastWord.replace(/.*((?:<\/\w+>)*)$/, '$1');
        $(this).html(wordArray.join(' ') + lastWord);
    }
});

jsFiddle demo