0

这个脚本让我发疯,它的主要特点是避免长标题上的孤儿。

一切都很顺利,直到我意识到如果我向<h1><a href="#">在这种情况下为 an)添加任何类型的标记,标记就会被剥离,因此链接会丢失。

这是当前脚本:

$('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(' '));
  }
});

这是一个简单的演示

非常感谢任何指导。

谢谢,

4

2 回答 2

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

于 2013-10-18T03:59:05.957 回答
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 演示

于 2013-10-18T14:54:24.680 回答