Chrome JavaScript 使用换行符以不同的方式呈现文本

chrome javascript renders text differently with newlines

提问人:blueseal 提问时间:8/30/2023 最后编辑:blueseal 更新时间:8/30/2023 访问量:48

问:

我的用例:我在互联网上的任何网站上选择文本,我希望网页中选定的文本被划分为段落,所以我使用两个来获取网页中的段落数。所以基本上我想要一个网站上的段落数。'\n'

我有带有双换行符的文本,但 javascript 客户端在渲染时删除了一些换行符。例如,此文本呈现为 ,因此当我复制文本并粘贴到某处时,我错过了换行符。something goes \n\n like this \n\n and but browser gives wrong resultsomething goes like this and but browser gives wrong result

我的用例:我希望网页上的文本被分成段落,所以我用鼠标选择文本并这样做: ,我没有得到换行符,似乎 javascript 或 HTML 或浏览器删除了字符。"entire web page text selection".split("\n\n)"\n

我在 nodejs 环境和浏览器环境中得到了不同的结果,我成功地在这个:(上浪费了几个小时

在 nodejs 中,换行符 in 给出了正确的结果,但在 javascript(客户端)中给出了错误的结果\nstring.split

节点js,

const bodyText = "something goes \n\n like this \n\n and but browser gives wrong result when I select this text on a rendered web page"  

console.log(bodyText.split("\n\n").length) //3

在浏览器 js 中,它失败了

const bodyText = "something goes \n\n like this \n\n and but browser giving wrong results when I select this text on a rendered web page "//rendered text on webpage removes \n

console.log(bodyText.split("\n\n").length) //1

我怎样才能达到同样的结果,有什么想法吗? 谢谢!

TL的;博士:I basically select text on any website to know how many paragraphs are in the content, so I'm clueless now.

JavaScript HTML 节点 .js 谷歌浏览器 拆分

评论

0赞 Stephen P 8/30/2023
“它看起来像 JavaScript 或 HTML 或浏览器”——JavaScript 没有删除换行符;HTML 规范说所有空格都是等价的,并且折叠成一个空格......所以两者都被视为单个空格 ' ' 字符(除非 CSS 另有说明)。选择呈现的文本是另一回事,未指定,并且可能因浏览器而异。一个有用的读物是 HTML、CSS 和 DOM 如何处理空格\n\n \n \n<pre>

答:

0赞 Adri 8/30/2023 #1

似乎没有问题。

使用 nodejs v18.14.2 和您提供的确切代码,输出为 .3

在 chrome 和 firefox 的控制台中,输出也是 .3

0赞 Rahul Verma 8/30/2023 #2

由于 nodejs 和浏览器 js 中的换行符工作方式不同,您面临的问题。 Node.js 将连续的换行符视为结果数组中的单独元素。 但是,在浏览器 JavaScript 中,HTML 将连续的换行符视为单个空格字符。 若要在 Node.js 和浏览器中实现一致的行为,可能需要考虑使用在这两种方案中一致工作的不同分隔符

const bodyText = "something goes \n\n like this \n\n and but browser gives wrong results";

// Use a custom delimiter 
const delimiter = "|||";


const newBodyText = bodyText.replace(/\n\n/g, delimiter);

// Split the newBodyText using the custom delimiter
const paragraphs = newBodyText.split(delimiter);

console.log(paragraphs.length); // 3

评论

1赞 blueseal 8/30/2023
我基本上在任何网站上选择文本来了解内容中有多少段落,所以我现在一无所知。您的解决方案仅适用于我拥有的网站。