这个剧本让我发疯,它的主要特点是避免长篇章的孤儿。
一切都运行良好,直到我意识到如果我向<h1>
(在这种情况下为<a href="#">
)添加任何类型的标记,标记将被删除,因此链接将丢失。< / p>
这是当前的脚本:
$('h1').each(function() {
var wordArray = $(this).text().split(' ');
if (wordArray.length > 1) {
wordArray[wordArray.length-2] += ' ' + wordArray[wordArray.length-1];
wordArray.pop();
$(this).html(wordArray.join(' '));
}
});
这是simple demo。
非常感谢任何指导。
谢谢,
答案 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] += ' ' + 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] += ' ' + wordArray[wordArray.length-1];
var lastWord = wordArray.pop();
lastWord = lastWord.replace(/.*((?:<\/\w+>)*)$/, '$1');
$(this).html(wordArray.join(' ') + lastWord);
}
});