jQuery选择带点号的动态id元素更新文本不生效如何解决?
问题根因
核心是CSS选择器的特殊字符解析规则:.在CSS选择器中是类选择器的标识符,当你使用$("#someTab.123")这类写法时,jQuery会将其解析为「查找id为someTab且拥有类名123的元素」,而非查找id为someTab.123的元素,因此匹配不到对应节点。
解决方法
- 方法1:转义id中的特殊字符
构造选择器时将id中的.转义,JS中需要用双反斜杠实现转义:var someTabId = "someTab." + userId // 转义点字符 var selector = "#" + someTabId.replace(/\./g, '\\.') $(selector).text("some text here") - 方法2:使用原生DOM方法匹配id(更稳妥)
原生document.getElementById方法是直接按字符串完全匹配id,不会做CSS选择器解析,完全规避特殊字符问题:var someTabId = "someTab." + userId $(document.getElementById(someTabId)).text("some text here") - 方法3:从命名规则规避问题
后续命名id时避免使用CSS选择器保留的特殊字符(.、#、:、[、]等),比如将点替换为下划线:
页面元素id改为:<td id="someTab_@user.UserId">I want to update value here</td>
JS构造id的逻辑对应修改为:var someTabId = "someTab_" + userId
内容的提问来源于stack exchange,提问作者zarpat
相关产品推荐
相关产品推荐

