Javascript: 如何循环遍历文档,改几个字?
Javascript: How to loop through document and change a few words?
我这样做只是为了了解一下 Firefox 插件和 Javascript。我是 Javascript 和 FF 插件的新手。我已经用谷歌搜索了 2 个小时,阅读了大约 30 个关于该主题的不同页面,但没有一个页面真正符合我正在尝试做的事情。如果您没有猜到,我通过查看代码学习得最好。
未使用 Jquery,仅使用原始 Javascript。我可能稍后会到达 Jquery,但不是现在。
我想遍历网页上的某些元素,例如 a、p、div,并更改其显示的 html (.innerHTML ).但我有问题。这是我的代码。
// Change the text in these elements.
var eleArr=['a', 'p', 'h1', 'h2', 'blockquote', 'div', 'td', 'li'];
var fromArr=['men', 'man', 'Men', 'Man', 'guy', 'guys', 'girl', 'Girl'];
var toArr=['Blues', 'Blue', 'Blues', 'Blue', 'blue', 'blues', 'pink', 'pink'];
var i;
console.log("Starting, eleArr.length="+eleArr.length);
// First loop through every element to check for string in fromArr[].
for (i=0; i < eleArr.length; i++)
{
//console.log("Checking element "+eleArr[i]);
test1(eleArr[i]); // Process one element at a time.
}
////////////////////////////////////////////////////////////////
function test1(mytag)
{
var elements = document.getElementsByTagName(mytag);
var i, j;
console.log("Test1: Checking element '"+mytag+"'");
for (i=0; i<elements.length; i++) // Loop through all elements with mytag.
{
// Loop through fromArr[] here.
for (j=0; j<fromArr.length; j++)
{
var s=fromArr[j];
var re=/s/ig; // Creates regex object.
var ele=elements[i];
var oldhtml=ele.innerHTML;
if (oldhtml.indexOf(fromArr[j]) >= 0)
{
console.log("TEST1: Found: "+fromArr[j]+" in ele '"+mytag+"': "+oldhtml);
oldhtml.replace(re, toArr[j]);
ele.innerHTML=oldhtml;
console.log("TEST1: Replaced with: "+oldhtml)
}
}
}
}
它找到的第一个元素是一个元素,但它在 ele.innerHTML 中有大量的子元素。如何只抓取显示的 HTML 文本?抓取第一个元素的示例。
<div>
<p class="parent"></p>
<a href="http://www.some.com">some link</a>.
</div>
从技术上讲,该元素没有任何可显示的文本可供更改。但是 'a' 锚元素确实有要查看的文本 'some link'.
我在这里做错了什么?
谢谢。
我在这里找到了答案。问题是我如何处理这些元素。
现在我有了执行此操作的基本方法,但我遇到了另一个问题。当我将 'man' 更改为 'blue' 时,我只想更改整个单词,但它不起作用。我不确定执行此操作的正则表达式是什么。
输入:很多人都很有礼貌。
当前输出:Bluey a blue 有很好的 blueners blue。
预期输出:许多蓝色都有良好的举止。
备注:
我这样做只是为了了解一下 Firefox 插件和 Javascript。我是 Javascript 和 FF 插件的新手。我已经用谷歌搜索了 2 个小时,阅读了大约 30 个关于该主题的不同页面,但没有一个页面真正符合我正在尝试做的事情。如果您没有猜到,我通过查看代码学习得最好。
未使用 Jquery,仅使用原始 Javascript。我可能稍后会到达 Jquery,但不是现在。
我想遍历网页上的某些元素,例如 a、p、div,并更改其显示的 html (.innerHTML ).但我有问题。这是我的代码。
// Change the text in these elements.
var eleArr=['a', 'p', 'h1', 'h2', 'blockquote', 'div', 'td', 'li'];
var fromArr=['men', 'man', 'Men', 'Man', 'guy', 'guys', 'girl', 'Girl'];
var toArr=['Blues', 'Blue', 'Blues', 'Blue', 'blue', 'blues', 'pink', 'pink'];
var i;
console.log("Starting, eleArr.length="+eleArr.length);
// First loop through every element to check for string in fromArr[].
for (i=0; i < eleArr.length; i++)
{
//console.log("Checking element "+eleArr[i]);
test1(eleArr[i]); // Process one element at a time.
}
////////////////////////////////////////////////////////////////
function test1(mytag)
{
var elements = document.getElementsByTagName(mytag);
var i, j;
console.log("Test1: Checking element '"+mytag+"'");
for (i=0; i<elements.length; i++) // Loop through all elements with mytag.
{
// Loop through fromArr[] here.
for (j=0; j<fromArr.length; j++)
{
var s=fromArr[j];
var re=/s/ig; // Creates regex object.
var ele=elements[i];
var oldhtml=ele.innerHTML;
if (oldhtml.indexOf(fromArr[j]) >= 0)
{
console.log("TEST1: Found: "+fromArr[j]+" in ele '"+mytag+"': "+oldhtml);
oldhtml.replace(re, toArr[j]);
ele.innerHTML=oldhtml;
console.log("TEST1: Replaced with: "+oldhtml)
}
}
}
}
它找到的第一个元素是一个元素,但它在 ele.innerHTML 中有大量的子元素。如何只抓取显示的 HTML 文本?抓取第一个元素的示例。
<div>
<p class="parent"></p>
<a href="http://www.some.com">some link</a>.
</div>
从技术上讲,该元素没有任何可显示的文本可供更改。但是 'a' 锚元素确实有要查看的文本 'some link'.
我在这里做错了什么?
谢谢。
我在这里找到了答案。问题是我如何处理这些元素。
现在我有了执行此操作的基本方法,但我遇到了另一个问题。当我将 'man' 更改为 'blue' 时,我只想更改整个单词,但它不起作用。我不确定执行此操作的正则表达式是什么。
输入:很多人都很有礼貌。
当前输出:Bluey a blue 有很好的 blueners blue。
预期输出:许多蓝色都有良好的举止。
备注: