我想创建一个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新手,我想要一些能够帮助我实现这一目标的技巧。也许我还没有找到现有的解决方案,因为我没有正确搜索的术语。
我感谢任何指点,并乐意为自己找出解决方法。
答案 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。这可能会解决您的问题,或者您可以根据自己的需要调整此方法。