
在web开发中,我们经常需要从html内容中提取特定信息,例如获取所有<script>标签的src属性,以便了解页面加载了哪些外部脚本。虽然正则表达式(regex)在字符串匹配方面功能强大,但它并不适合解析复杂的html结构。html是一种标记语言,其嵌套和不规则的特性使得使用正则表达式进行可靠的解析变得极其困难且容易出错。
HTML的结构是树状的,包含开始标签、结束标签、属性以及嵌套关系。正则表达式是基于文本模式匹配的,难以准确地处理:
因此,对于HTML内容的解析,更推荐使用专门的DOM(Document Object Model)解析器。
JavaScript提供了DOMParser API,允许我们将HTML或XML字符串解析成一个DOM文档对象,然后就可以像操作浏览器中的document对象一样,使用标准的DOM方法来查询和提取信息。
以下代码演示了如何从一个包含多个<script>标签的HTML字符串中,提取所有外部脚本的URL:
立即学习“Java免费学习笔记(深入)”;
// 待解析的HTML字符串
const html_code = `<html>
<head>
<script src="https://code.jquery.com/jquery-3.7.0.slim.min.js"></script>
<script src="/assets/script.js"></script>
</head>
<body>
  <script>
    // 这是一个内联脚本,没有src属性
    var code = 'nope';
  </script>
  <p>其他内容</p>
  <footer><script src="/assets/footer.js"></script></footer>
  </body>
</html>`;
// 1. 创建DOMParser实例
const parser = new DOMParser();
// 2. 将HTML字符串解析为DOM文档对象
// 'text/html' 指示解析器将字符串作为HTML文档处理
const html_doc = parser.parseFromString(html_code, 'text/html');
// 3. 使用querySelectorAll选择所有带有'src'属性的<script>标签
// 'script[src]' 是一个CSS选择器,表示选择所有标签名为'script'且包含'src'属性的元素
const script_tags = html_doc.querySelectorAll('script[src]');
// 4. 将NodeList转换为数组,并使用map方法提取每个标签的'src'属性值
const sources = Array.from(script_tags).map((s) => s.getAttribute('src'));
// 输出提取到的所有脚本源URL
console.log(sources);
// 预期输出: [ 'https://code.jquery.com/jquery-3.7.0.slim.min.js', '/assets/script.js', '/assets/footer.js' ]代码解析:
如果你的目标HTML内容已经加载在当前的浏览器页面中,并且你希望获取的是当前页面中所有外部脚本的src,那么你甚至不需要DOMParser。可以直接使用document对象:
// 在浏览器控制台中运行此代码,它将返回当前页面所有外部脚本的src
console.log( Array.from(document.querySelectorAll('script[src]')).map((s) => s.getAttribute('src')) );这与上述示例的核心逻辑相同,只是操作对象从解析后的html_doc变为了全局的document对象。
通过本教程,我们学习了如何利用JavaScript的DOMParser API,以一种健壮和标准化的方式从HTML字符串中提取<script>标签的src属性。这种方法避免了正则表达式在解析HTML时固有的缺陷,确保了代码的可靠性和可维护性。无论是在客户端处理动态HTML内容,还是在构建需要解析HTML的工具时,DOM解析都是提取结构化信息的首选方法。
以上就是JavaScript:利用DOM解析从HTML字符串中提取脚本源URL的详细内容,更多请关注php中文网其它相关文章!
                        
                        HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号