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 · 1529 次点击
    这是一个创建于 443 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 都忘光了,就问一句:是 gb2312/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  
       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   ·   我们的愿景   ·   实用小工具   ·   5429 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 58ms · UTC 03:32 · PVG 11:32 · LAX 20:32 · JFK 23:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.