You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何用getAttribute获取的文本与变量赋值的文本不一致?

问题解析:getAttribute获取的文本与变量字符串不一致的原因

核心原因是HTML属性值的解析规则和JavaScript字符串的解析规则存在差异:

  • HTML解析器处理属性值时,会自动将属性内的换行符(\n)、制表符(\t)等空白字符替换为空格,并且会把多个连续的空白字符合并成单个空格。
    你的HTML中txt属性里的换行和制表符,经过HTML解析后都会被转成空格,最终通过getAttribute拿到的text内容是所有空白合并后的字符串:"text test parse new line"。

  • 而JavaScript中直接赋值的字符串text2会保留原始的空白字符,也就是包含制表符(\t)和换行符(\n),内容为"text\t test\nparse\t new\nline",和经过HTML处理后的text自然无法匹配。

验证方法

可以通过打印字符编码的方式确认差异:

// 打印text的字符编码
console.log(Array.from(text).map(c => c.charCodeAt(0)));
// 打印text2的字符编码
console.log(Array.from(text2).map(c => c.charCodeAt(0)));

对比结果会发现,text里的空白字符都是ASCII码32(空格),而text2里存在ASCII码9(制表符)和10(换行符)。

解决方案

如果需要让两者内容一致,有两种思路:

  1. 标准化JS字符串,将所有空白字符替换为单个空格:
const text2Normalized = text2.replace(/\s+/g, ' ');
console.log(text.localeCompare(text2Normalized)); // 返回0,说明相等
  1. 如果想让getAttribute获取原始的空白字符,可以在HTML属性中使用字符实体表示制表符和换行:
<div name="other" txt="text&#9;test&#10;parse&#9;new&#10;line">test</div>

此时通过getAttribute拿到的内容就会和JS里的text2一致。

内容的提问来源于stack exchange,提问作者Chimera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:00:20