domparser 是浏览器中解析 html 字符串的唯一可靠方式,需指定 'text/html' 类型,再用 getattribute() 或 dataset 提取属性;python 应用 beautifulsoup 或 lxml,避免正则解析。

用 DOMParser 解析 HTML 字符串再取属性值
浏览器里处理 HTML 字符串,DOMParser 是唯一靠谱的起点。它把字符串真正转成 DOM 树,后续所有 getAttribute()、dataset、querySelectorAll() 才有依据。
常见错误是直接对原始 HTML 字符串调用正则或 indexOf() —— 一旦遇到换行、空格不一致、属性顺序颠倒(如 src="a.js" type="module" vs type="module" src="a.js"),就挂。
- 必须指定 MIME 类型为
'text/html',否则解析行为不可控 - 若 HTML 片段不含
或,DOMParser会自动补全,但不会影响属性提取 - 对 script/style 标签内的伪属性(如
<script>var x = 'class="foo"';</script>)天然免疫,不用手动过滤
用 getAttribute() 和 dataset 区分标准属性与 data- 属性
getAttribute('href') 和 el.href 不是一回事:getAttribute() 拿的是 HTML 字符串里写的原始值;el.href 是浏览器解析后的绝对 URL。提取“源码中怎么写的”,必须用 getAttribute()。
对于 data- 属性,优先走 dataset:它自动把 data-user-id 转成 el.dataset.userId,省去手动处理连字符。但注意两个例外:
- 属性名含大写字母(如
data-userId)→dataset.userid读不到,得回退getAttribute('data-userId') - 属性名以数字开头(如
data-1st-place)→ 点号语法失效,只能用dataset['1st-place']
Python 里别硬写正则,直接上 BeautifulSoup 或 lxml
在 Python 中,re.findall(r'href=["\'](.*?)["\']', html) 这类正则看似快,实际踩坑率极高:引号嵌套、HTML 实体(")、注释里的伪属性、跨标签匹配都会导致错漏。
真正稳定的做法是交由专业解析器:
-
BeautifulSoup(html, 'html.parser')容错强,适合脏 HTML;用tag.get('href')或tag['href'](后者在属性不存在时抛异常) -
lxml.html.fromstring(html)性能高,支持 XPath;tree.xpath('//a/@href')一行提取全部 href 值 - 两者都自动剥离
<script></script>/<style></style>内容,无需额外清洗
警惕 value 属性和实时值的混淆
表单元素的 value 属性特别容易误读:input.getAttribute('value') 返回的是 HTML 初始值(比如 <input value="default">),而 input.value 是当前用户输入后的真实内容。
如果你的任务是从服务端返回的 HTML 片段中提取「默认值」(例如预填充表单),必须用 getAttribute('value');如果要读用户刚输的内容,则该用 .value。二者混用是线上 bug 的高频来源。
布尔属性(disabled、checked)更微妙:getAttribute('disabled') 在存在时返回字符串 "disabled",不存在时返回 null;不能靠 == true 判断,得用 hasAttribute('disabled')。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











