使用JavaScript修改HTML中var元素数据失败,如何根据check.innerText更新电话号码
问题解决方案
- 核心语法错误:原代码中
call函数的闭合大括号位置错误,将window.location.href = tellnum这行核心跳转逻辑隔离在了函数作用域之外。调用call()时只会执行变量赋值和判断逻辑,不会触发跳转,同时函数作用域内定义的tellnum在外部无法访问,还会抛出变量未定义的报错。 - 文本匹配可靠性低:
innerText获取的内容可能自带前后空格、换行符等不可见字符,直接用全等判断匹配失败概率很高。 - 可选优化:自动监听文本变化:原逻辑仅在主动调用
call()时才会读取一次locinfo的内容,若要实现内容变化时自动调整电话号码,可额外添加DOM变化监听逻辑。
基础可用修复代码
function call(){ // 先清除文本前后的空白字符,避免匹配失败 var check = document.getElementById("locinfo").innerText.trim(); var tellnum = "tel:+998951441000"; if (check == "Катартал") { tellnum = "tel:+998998047911"; } else if (check == "Куйлик") { tellnum = "tel:+998951440010"; } // 跳转逻辑移到函数内部 window.location.href = tellnum; }
带内容变化自动监听的优化代码
如果需要locinfo内容变化时实时更新对应电话号码,不需要每次调用时再判断,可使用以下实现:
// 全局存储实时生效的电话号码 var currentTellnum = "tel:+998951441000"; // 初始化DOM内容监听器 const observer = new MutationObserver(() => { const check = document.getElementById("locinfo").innerText.trim(); if (check == "Катартал") { currentTellnum = "tel:+998998047911"; } else if (check == "Куйлик") { currentTellnum = "tel:+998951440010"; } else { currentTellnum = "tel:+998951441000"; } }); // 绑定监听目标,监听文本内容变动 observer.observe(document.getElementById("locinfo"), { childList: true, characterData: true, subtree: true }); // 调用跳转时直接使用实时更新的号码 function call(){ window.location.href = currentTellnum; }
内容的提问来源于stack exchange,提问作者IronStar
相关产品推荐
相关产品推荐

