javascript - 使用 javascipt 查找相关的 HTML 标签
问题描述
我想用 javascipt 找到相关的 HTML 标签。我用正则表达式尝试了一些想法,但没有成功。
示例 html:
<span>Hello <span>World</span></span><span>How are you</span>
我想找到
<span>Hello <span>World</span></span>
和
<span>How are you</span>
但不是全部而不是
<span>Hello <span>World</span>
我的尝试:
/<(\w+)(?:"[^"]*"|'[^']*'|[^'">])*>(.*)<\/\1>/gmi
和
/<(\w+)(?:"[^"]*"|'[^']*'|[^'">])*>(.*?)<\/\1>/gmi
其他人认为我不记得的观点。
解决方案
这取决于相关标签的含义。如果您只想通过标签名称提取元素,那么您可以考虑使用document.getElementsByTagName
function 或querySelector
. 但是要实现您在上面的示例中展示的内容,您只需过滤容器的子项即可。
看一下代码示例:
// Example 1: only spans
const EXAMPLE_1 = document.getElementById('example1')
let relatedA = [...EXAMPLE_1.children].filter(x => x.tagName.toUpperCase() === 'SPAN')
console.log(relatedA.map(x => x.outerHTML))
// Example 2: only A and marked as related
const EXAMPLE_2 = document.getElementById('example2')
let relatedB = [...EXAMPLE_2.querySelectorAll('a, .related')]
console.log(relatedB.map(x => x.outerHTML))
<div id="example1">
<span>Hello <span>World</span></span>
<span>How are you?</span>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ab voluptas perferendis enim dolores ad reprehenderit aliquam id ut doloremque aut laboriosam, consequuntur labore in amet cupiditate? Voluptatibus, ipsa beatae aliquid.</p>
<span>I'm fine, thanks!</span>
</div>
<div id="example2">
<a href="#">A</a>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Veniam distinctio alias vel quo consectetur in rem eum, aut animi quidem at molestias esse architecto quisquam, itaque sit velit eligendi eius!</p>
<a href="#">B</a>
<p class="related">C</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Magni aspernatur libero aliquid maiores reiciendis, quam culpa, mollitia harum molestiae, quos aut. Laborum molestias aliquid ipsum. Dolorum impedit expedita, sunt odio!</p>
<a href="#">D</a>
<a href="#">E</a>
</div>
推荐阅读
- javascript - 在滚动时移动 DomElements 时进入滚动循环
- html - 固定和中心导航栏
- reactjs - MUI异步自动完成和react-hook-form:表单无法访问自动完成值
- r - 在控制台输出的小标题中显示所有列
- r - 将带有 dna 序列的 csv 文件转换为带有 rstudio 和 biostrings 的 fasta 格式
- azure - C# - 如何在 Azure 上显示日期时间巴西格式 (dd/mm/yyyy)
- python - 在 FigureCanvas 上显示的条形图动画中标记轴时出现问题
- ios - Firebase 中的 Analytics Parameter Price 参数会自行添加额外的数字
- reactjs - 引导 5.1 下拉菜单无法与反应正常工作
- python - HTTPConnectionPool(主机='localhost',端口=4444)