问下 js 大神,关于 getElementById 获取内容不更新的问题

2023-01-31 14:38:16 +08:00
 yws112358

js 方面是新手,最近使用该方法以及 replace 来进行字符替换。 以下是案例,不是实际内容
html <div id="jianjie">我是谁?</div>
我使用
document.getElementById("jianjie").innerHTML=document.getElementById("jianjie").innerHTML.replace(/Who/g,"whom") 做字符替换。
场景是:wordpress 站安装了使用谷歌接口的插件( GTranslate )来进行全站翻译,但是有个别词翻译不对,也没修正的接口。翻译是有延迟,也就是每次打开是简体中文,需要等会才变成英文。我打算在网页加载后,每隔 5 秒钟(或延迟 10 秒)运行一次以上脚本。 出现错误是:脚本执行的时候,页面其实已经翻译为英文,但是脚本报错,浏览器的控制台提示“Uncaught SyntaxError: Unexpected token '<' ”另外点击后面的 debugger ,显示获取到的内容还是中文的,并没更新为英文状态的。
此时如果控制台运行以上命令是可以正确执行,但是脚本在页面里执行就会有以上问题

有大神分析下吗?或者如何解决?

1601 次点击
所在节点    JavaScript
18 条回复
honkew
2023-01-31 14:44:07 +08:00
语法错误 '<'
NoOneNoBody
2023-01-31 14:49:42 +08:00
js 都忘光了,就问一句:是 gb2312/gbk 还是 utf-8 ?前者可能会有 /转义问题
v2lhr
2023-01-31 14:55:57 +08:00
请求的资源文件的 content-type 错误吧
sanxineryong
2023-01-31 14:59:18 +08:00
貌似报错不是这段脚本引起的,或者先试着解决报错?
cydysm
2023-01-31 15:00:58 +08:00
@v2lhr 3# 赞同
SingeeKing
2023-01-31 15:04:10 +08:00
这个看上去是 json 解析导致的,常见的就是对一个应该返回 json 的接口返回了 <!html ...
yws112358
2023-01-31 15:06:45 +08:00
@v2lhr #3
@SingeeKing #6
你们说的是 翻译插件的问题吗? 浏览器的 js debugger 里显示 获取的是 未翻译前的中文内容。实际此时页面已经被翻译成英文了。
推迟运行的 js 就报错。
但是如果在 console 里执行 就正常运行 并成功替换了
corcre
2023-01-31 15:13:11 +08:00
给你个简单的检测方法, 你把这行注释掉看看还报错不...
nitmali
2023-01-31 15:36:09 +08:00
请发完整代码
codehz
2023-01-31 15:36:51 +08:00
你这个脚本,不会是返回了 html 了吧,是不是一个 404.html((
另外可以通过 class="notranslate" translate="no" 的方式防止元素被翻译(不确定对自己嵌入的有没有效果)
yws112358
2023-01-31 16:42:41 +08:00
@codehz #10
@nitmali #9 已经放网站地址了 谢谢帮忙看下
imagecap
2023-01-31 16:55:03 +08:00
settimeout( function() {xxxx}, 1000 );
应该是语法问题
cpstar
2023-01-31 17:03:37 +08:00
679 行
应该是 setTimeout(function(){document.getElementById("jianjie").innerHTML=document.getElementById("jianjie").innerHTML.replace(/Xilu/g,"Genglu");},10000)
把你那条语句包装成匿名函数
yws112358
2023-01-31 17:16:22 +08:00
@cpstar #13
@imagecap #12 非常感谢,不了解 js 有这个机制 以为直接嵌套就行了。我也可以改为 setInterval 来间隔性的执行吧?
yws112358
2023-01-31 17:25:21 +08:00
@cpstar #13 有什么好办法 让他遍历整个页面 替换错误的翻译。
cpstar
2023-01-31 20:41:07 +08:00
15# 你怎么定位错误的翻译?是知道在哪,还是每次都需要程序判定?
页面上不是有 jQuery 么,上 jQuery 去遍历 DOM 省点事。
setTimeout(function(){
jQuery("#jianjie").html(jQuery("#jianjie").html().replace(/Xilu/g,"Genglu"));
}, 10000);

或者干脆来一个狠的:
jQuery("body").html(jQuery("body").html().replace(---));
yws112358
2023-02-01 08:21:13 +08:00
@cpstar #16 因为 js 编程基本不会啊。。。哈哈 我大概能看明白意思 我看看 replace 里 正则能用 或 关系连接多种字眼不 因为这个谷歌翻译 不止把浭庐 翻译成 xilu 还有 wulu 啥的 真搞不懂
yws112358
2023-02-04 10:10:54 +08:00
@cpstar #16 后来我加了 if ( match )来判断是否包含某字段,包含在进行替换 定位直接定位#Content 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/911942

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX