使用JavaScript到HTML对所有可见文本执行函数?

使用JavaScript到HTML对所有可见文本执行函数?,javascript,jquery,html,Javascript,Jquery,Html,我想用JavaScript编写一个函数,解析网站上所有可见的文本,并在其上执行一个简单的函数 以下代码示例使用JQuery: $("*").each(function() { var t = $(this).text(); if (t != "") { t = t.toUpperCase(); } }); 注意:我知道有一些方法可以在CSS中执行与上述示例类似的功能。我的目的是为了学习书写系统,将所有罗马文本转换成另一种Unicode书写系统,但我想先了解基本原理 上面的代

我想用JavaScript编写一个函数,解析网站上所有可见的文本,并在其上执行一个简单的函数

以下代码示例使用JQuery:

$("*").each(function() {
  var t = $(this).text();
  if (t != "") {
    t = t.toUpperCase();
  }
});
注意:我知道有一些方法可以在CSS中执行与上述示例类似的功能。我的目的是为了学习书写系统,将所有罗马文本转换成另一种Unicode书写系统,但我想先了解基本原理

上面的代码并没有达到预期的效果,因为它占用的前端代码远远超过了我想要的。我正在寻找一个只返回以下文本实例的函数:

  • 表单项(按钮、输入等)
  • 链接
  • 一般页面正文文本

如何修改上述函数以返回所需的结果?

首先确定哪些选择器与要包含或排除的文本匹配。例如,要匹配除
页眉
页脚
以外的任何内容,可以使用选择器

*:not(header):not(footer)
这可以在递归迭代时使用,以确定要输入和修改的元素。(您可以使用TreeWalker来选择所需的文本节点。)或者,您可以使用

button, a
要选择所有按钮和定位,请选择其所有子体文本节点

您只想选择文本节点-如果您只需重新分配元素的
.text()
,您将替换其所有内容,包括HTML元素-您将破坏HTML并删除事件侦听器等。这是不可取的。只需重新指定文本节点的文本即可:

//https://stackoverflow.com/q/2579666
const getTextNodes=(父节点)=>{
const walker=document.createTreeWalker(
父母亲
NodeFilter.SHOW_TEXT,
无效的
假的
);
常量textNodes=[];
while(node=walker.nextNode()){
textNodes.push(节点);
}
返回文本节点;
}
for(document.querySelectorAll('button,a')的常量){
const-degenanttextnodes=getTextNodes(elm);
for(子体TextNodes的常量textNode){
textNode.textContent=textNode.textContent.toUpperCase();
}
}
for(document.querySelectorAll('input[type=“button”]”)的常量输入){
input.value=input.value.toUpperCase();
}
div
按钮
锚
锚的跨度后代

一般页面正文是什么意思?这不包括页面上的所有文本吗,或者你只是想排除页眉/页脚之类的东西吗?当然,我只是想说得具体一些