我有一个HTML页面,我从数据库中包含的数据生成.数据库有时包含浏览器无法破解的长字符串,因为字符串不包含可破坏的字符(空格,点,逗号等).
有没有办法解决这个使用HTML,CSS甚至JavaScript?
有关问题的示例,请参阅此链接.
是的,你可以,只需将框的css属性设置为:
.some_selector { word-wrap: break-word; }
编辑:一些测试显示它确实可以使用div或ap - 块级元素 - 但它不能用于表格单元格,也不能将div放在表格单元格中.
经过测试,适用于IE6,IE7,IE8,Firefox 3.5.3和Chrome.
作品:
aaaaaaaaaaaaaaaaaaaaaaddddddddddddddddddddddddddddddddddddddddddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
根据这篇文章和这一个,以及:所述"害羞连字符"或"软连字符"可以写在HTML为:
/
/
(173 DEC = AD十六进制).它们都转换为U + 00AD字符.
JavaScript textContent
和nodeValue
DOM文本节点不是"实体编码" - 它们只包含实际实体.因此,为了编写这些字符,您必须自己编码:这\xAD
是在JavaScript字符串中编写相同字符的简单方法. String.fromCharCode(173)
也会有用.
基于你自己非常好的答案 - 一个jQuery插件版本:
$.fn.replaceInText = function(oldText, newText) { // contents() gets all child dom nodes -- each lets us operate on them this.contents().each(function() { if (this.nodeType == 3) { // text node found, do the replacement if (this.textContent) { this.textContent = this.textContent.replace(oldText, newText); } else { // support to IE this.nodeValue = this.nodeValue.replace(oldText, newText); } } else { // other types of nodes - scan them for same replace $(this).replaceInText(oldText, newText); } }); return this; }; $(function() { $('div').replaceInText(/\w{10}/g, "$&\xAD"); });
附注:
我认为这应该发生的地方不是在JavaScript中 - 它应该在服务器端代码中.如果这只是用于显示数据的页面 - 您可以在将文本发送到浏览器之前轻松地对文本执行类似的正则表达式替换.然而,JavaScript解决方案提供了一个优势(或者取决于您希望如何看待它的缺点) - 在脚本执行之前,它不会向数据添加任何无关的字符,这意味着任何机器人抓取HTML输出以获取数据都不会看到害羞的连字符.尽管HTML规范将其解释为"连字符提示"和不可见的字符,但它在Unicode世界的其他部分中无法保证:( 引用Unicode标准,通过我链接的第二篇文章)
U + 00AD软连字符表示连字点,当要连字时,首选换行符.根据脚本,当发生换行符时,此字符的可见呈现可能不同(例如,在某些脚本中,它呈现为连字符 - 而在其他脚本中,它可能是不可见的).
另一个注意事项:
在其他SO问题中找到- 似乎" 零宽度空间 "字符
/
/ U+200b
是您可能想要探索的另一个选项.这将是\x20\x0b
一个javascript字符串.