2012-04-01 21 views
1

我想创建一个JavaScript书签,它将任何网站上的所有文本(或大多数网站上的大多数文本)交换到具有相似长度的不同字符串,同时保持网站的格式。如何创建小书签将网站上的所有文本更改为其他类似长度的文本?

想替换为“Lorem存有”填料的文本上nytimes.com所有文本,而不significally改变所述文本的长度。

该代码应该能够作为一个书签工作,但也可以作为一个可嵌入的按钮。

内容是这样的:

<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

你的问题是什么? – Zirak 2012-04-01 18:20:12

+0

我编辑了标题以包含实际问题。 – Florian 2012-04-02 09:26:26

+1

你是什么意思*如何*?我们不会为你写信。你面临什么困难? [你有什么尝试?](http://mattgemmell.com/2008/12/08/what-have-you-tried/)这不是一个驱动代码工厂。 – Zirak 2012-04-02 12:29:55

回答

1

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

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

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

遍历DOM树可以用递归函数实现。我们称之为traverse(element)。该函数将检查element是否包含文本 - 如果是,请将其替换为Lorem Ipsum。然后遍历所有element的孩子(如果有的话)的for循环,并为每个孩子调用traverse()。随着traverse()功能实现递归这样,你只需要调用一次:traverse(document.body);

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

AJAX基础:http://www.w3schools.com/ajax/default.asp(和后面的章节)

DOM树:http://www.w3schools.com/htmldom/default.asp(和后面的章节)

+0

这很有帮助。谢谢! JS社区的w3schools是否受到尊重?我做了很多前端HTML/CSS工作,而w3schools网站提供了一些最糟糕的文档。 – Florian 2012-04-03 06:47:37

+0

该网站只涵盖Web开发各个方面的基础知识,包括JS。所以不行,只有通过阅读w3schools才能熟练使用JS。也许他们在付费课程中有更高级的课程,我不知道。 – Imp 2012-04-03 12:54:57

相关问题