如何创建书签以将网站上的所有文本更改为类似长度的其他文本?

时间:2012-04-01 18:14:35

标签: javascript button bookmarklet

我想创建一个javascript bookmarklet,将所有网站上的所有文本(或大多数网站上的大多数文本)交换为不同类似长度的字符串,同时保持网站的格式。

考虑用“Lorem Ipsum”填充文本替换nytimes.com上的所有文本,而不会显着改变文本的长度。

代码应该可以作为书签,也可以作为可嵌入按钮。

这样的内容:

<h2>Police Are Using Phone Tracking as a Routine Tool</h2>
<p class="author">By <span class="name">Eric Lichtblau</span></p>
<p>Law enforcement tracking of cellphones is a convenient surveillance tool in many situations, but it is unclear if using such technology without a warrant violates the Constitution.</p>

将改为:

<h2>Lorem ipsum dolor sit amet, consectetur adipisicing</h2>
<p class="author">Sed <span class="name">Consectetur Adipisicing</span></p>
<p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat. Duis aute irure dolor in reprehenderit in voluptate velit.</p>

将预定义用于替换原始内容的文本。

我是一个Javascript新手,我想要一些能够帮助我实现这一目标的技巧。也许我还没有找到现有的解决方案,因为我没有正确搜索的术语。

我感谢任何指点,并乐意为自己找出解决方法。

2 个答案:

答案 0 :(得分:1)

您可能在书签中没有足够的空间来将Lorem Ipsum包含为字符串文字。我建议将Lorem Ipsum存储在某个服务器上的txt文件中,然后使用Ajax请求它。当回复到来时,将其存储在字符串变量s中并初始化整数i = 0,我们将使用它来遍历该字符串。

然后,遍历网页的DOM树。每当遇到文本节点时,请执行以下操作:测量其长度(我们将其称为len)。然后用s.slice(i, i + len)替换该节点中的文本,字符串len中存储的Lorem Ipsum中的s个字符是什么。因此,文本被替换为相同长度的Lorem Ipsum的一部分。最后,增加迭代器:i += len,因为我们不想用相同的部分替换每个文本节点。

每当i超过s.length时,只需将其重新初始化为0

遍历DOM树可以使用递归函数实现。我们称之为traverse(element)。该函数将检查element是否包含文本 - 如果是,则将其替换为Lorem Ipsum。然后在一个for循环中迭代所有element个孩子(如果有的话)并为每个孩子调用traverse()。如此递归实现traverse()函数,您只需调用一次:traverse(document.body);

最后,如果你需要一些教程:

AJAX基础知识:http://www.w3schools.com/ajax/default.asp(以及后续章节)

DOM树:http://www.w3schools.com/htmldom/default.asp(以及后续章节)

答案 1 :(得分:1)

有一个bookmarklet that replaces all the text on the page with Lorem Ipsum。这可能会解决您的问题,或者您可以根据自己的需要调整此方法。