2011-01-20 62 views
6

它可以是库依赖的或不可知的。我只想知道是否存在可以分析页面的脚本(或者可能已经给出了某些节点),并且......可以保护文本中的寡妇和孤儿。JavaScript的寡妇/孤儿控制?

“保护”是什么意思?我不知道。我考虑过是否可以自己想出一个,但问题的一部分是我甚至不确定我会怎么做。

澄清:这将是对屏幕版本的网站,不能打印。

+0

你是说打印页面? – SLaks 2011-01-20 00:56:39

+0

你怎么能在屏幕上有孤儿或寡妇? – SLaks 2011-01-20 01:43:30

回答

4

我相信你在HTML文档中描述印刷寡妇?例如,单个单词是否包含在标题的新行中?

jQuery Widon't plugin通过您的HTML寻找这个,并在倒数第二个单词和最后一个单词之间放置一个不间断的空格,以确保至少有两个单词换行到新行。

希望这有助于卡尔

2

有插件叫widowfix比接受的答案更配置了一下。

$('h1').widowFix({ 
    letterLimit: 10, 
    prevLimit: 5, 
    linkFix: true 
}); 
0

$('span').each(function() { 
 
    var w = this.textContent.split(" "); 
 
    if (w.length > 1) { 
 
    w[w.length - 2] += " " + w[w.length - 1]; 
 
    w.pop(); 
 
    this.innerHTML = (w.join(" ")); 
 
    } 
 
});
#foo { 
 
    width: 124px; 
 
    border: 1px solid #ccc; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="foo"> 
 
    <span class="orphan">hello there I am a string really really long, I wonder how many lines I have</span> 
 
</div>

3

我最近碰到了这个问题,我角度的应用程序,并使用我发现this post一些正则表达式添加一个非休息空间之前拉斯T指令:

String.replace(/\s([^\s<]+)\s*$/,\'&nbsp\;$1');

但是角度是打印非换空间作为一个字符串,所以我采用的是Unicode和它的工作很大:
String.replace(/\s([^\s<]+)\s*$/,'\u00A0$1');

0

香草JavaScript的解决方案,最初发布于CSS Tricks

var headings = document.getElementsByTagName('h1'); 
for (var i=0; i<headings.length; i++) { 
    var h1s = headings[i].innerHTML.split(' '); 
    h1s[h1s.length-2] += "&nbsp;" + h1s[h1s.length-1]; 
    h1s.pop(); 
    headings[i].innerHTML = h1s.join(' '); 
}