问下 js 大神,关于 getElementById 获取内容不更新的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
yws112358
V2EX    Javascript

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

  •  1
     
  •   yws112358 2023-01-31 14:38:16 +08:00 2418 次点击
    这是一个创建于 1009 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 ,显示获取到的内容还是中文的,并没更新为英文状态的。
    此时如果控制台运行以上命令是可以正确执行,但是脚本在页面里执行就会有以上问题

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

    第 1 条附言    2023-01-31 16:42:17 +08:00
    看来不把网站直接公布,也不方便热心的大家来 debug
    http://ma.4000600021.com
    是个 1H1G 服务器 大家测试就行了,别 dddddos 就行
    我想用 v2 的 至少都可以 fq 左下角是那个翻译插件,翻译英文的时候 刷新页面就可以测试了。
    那段 js 我放到 body 结束标签前了
    honkew
        1
    honkew  
       2023-01-31 14:44:07 +08:00
    语法错误 '<'
    NoOneNoBody
        2
    NoOneNoBody  
       2023-01-31 14:49:42 +08:00
    js 都忘光了,就问一句:是 /gbk 还是 utf-8 ?前者可能会有 /转义问题
    v2lhr
        3
    v2lhr  
       2023-01-31 14:55:57 +08:00   1
    请求的资源文件的 content-type 错误吧
    sanxineryong
        4
    sanxineryong  
       2023-01-31 14:59:18 +08:00
    貌似报错不是这段脚本引起的,或者先试着解决报错?
    cydysm
        5
    cydysm  
       2023-01-31 15:00:58 +08:00 via iPhone
    @v2lhr 3# 赞同
    SingeeKing
        6
    SingeeKing  
    PRO
       2023-01-31 15:04:10 +08:00
    这个看上去是 json 解析导致的,常见的就是对一个应该返回 json 的接口返回了 <!html ...
    yws112358
        7
    yws112358  
    OP
       2023-01-31 15:06:45 +08:00
    @v2lhr #3
    @SingeeKing #6
    你们说的是 翻译插件的问题吗? 浏览器的 js debugger 里显示 获取的是 未翻译前的中文内容。实际此时页面已经被翻译成英文了。
    推迟运行的 js 就报错。
    但是如果在 console 里执行 就正常运行 并成功替换了
    corcre
        8
    corcre  
       2023-01-31 15:13:11 +08:00
    给你个简单的检测方法, 你把这行注释掉看看还报错不...
    nitmali
        9
    nitmali  
       2023-01-31 15:36:09 +08:00
    请发完整代码
    codehz
        10
    codehz  
       2023-01-31 15:36:51 +08:00 via iPhone
    你这个脚本,不会是返回了 html 了吧,是不是一个 404.html((
    另外可以通过 class="notranslate" translate="no" 的方式防止元素被翻译(不确定对自己嵌入的有没有效果)
    yws112358
        11
    yws112358  
    OP
       2023-01-31 16:42:41 +08:00
    @codehz #10
    @nitmali #9 已经放网站地址了 谢谢帮忙看下
    imagecap
        12
    imagecap  
       2023-01-31 16:55:03 +08:00
    settimeout( function() {xxxx}, 1000 );
    应该是语法问题
    cpstar
        13
    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
        14
    yws112358  
    OP
       2023-01-31 17:16:22 +08:00
    @cpstar #13
    @imagecap #12 非常感谢,不了解 js 有这个机制 以为直接嵌套就行了。我也可以改为 setInterval 来间隔性的执行吧?
    yws112358
        15
    yws112358  
    OP
       2023-01-31 17:25:21 +08:00
    @cpstar #13 有什么好办法 让他遍历整个页面 替换错误的翻译。
    cpstar
        16
    cpstar  
       2023-01-31 20:41:07 +08:00   1
    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
        17
    yws112358  
    OP
       2023-02-01 08:21:13 +08:00
    @cpstar #16 因为 js 编程基本不会啊。。。哈哈 我大概能看明白意思 我看看 replace 里 正则能用 或 关系连接多种字眼不 因为这个谷歌翻译 不止把庐 翻译成 xilu 还有 wulu 啥的 真搞不懂
    yws112358
        18
    yws112358  
    OP
       2023-02-04 10:10:54 +08:00
    @cpstar #16 后来我加了 if ( match )来判断是否包含某字段,包含在进行替换 定位直接定位#Content 了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4472 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 10:01 PVG 18:01 LAX 02:01 JFK 05:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86