如何判断当前光标下的html标签有没有子级元素?

假设有这段html:

<div class="content">
  <h1>title</h1>
  <a href="url">
    <img src="src"/>
  </a>
  <p>
    paragraph1
    <span>content of span</span>
    paragraph2
  </p>
</div>

div有子级元素,h1没有,a有子级元素,img没有,…

请问如何用elisp判断一个标签下有没有子级元素呢?

可以参考 highlight-rename-tag.el 的代码

1 个赞

感谢懒猫,参考了 highlight-matching-tag.el 的代码,解决了。

(require 'web-mode)
(defun print-html--has-child-p ()
  (let ((open-tag-pos (save-excursion
			            (web-mode-element-beginning)
			            (point)))
	    (close-tag-pos (save-excursion
			             (web-mode-tag-match)
			             (point))))
    (save-excursion
      (goto-char close-tag-pos)
      (or (search-backward-regexp "</.+>" open-tag-pos t)
	      (search-backward-regexp "/>" open-tag-pos t)))
    ))

如果有子级元素则返回子级元素close tag的position,没有子级元素返回nil

1 个赞

有web mode作基础的话啥都好办