所有明确启用拖拽且非显式禁用的元素可通过 document.queryselectorall('[draggable]:not([draggable="false"])') 获取;如需包含默认可拖拽的 img 和 a[href],扩展为 document.queryselectorall('[draggable]:not([draggable="false"]), img, a[href]')。

可以通过遍历 DOM 树,检查每个元素是否设置了 draggable 属性(包括显式设置为 true 或 "true" 的情况),来查询所有具有拖拽属性的节点。
使用 querySelectorAll 查找显式声明 draggable 的元素
最常用且高效的方式是用 CSS 属性选择器直接匹配:draggable 是一个布尔属性,只要存在即生效(无论值是 true、"true" 还是空字符串)。
注意:浏览器会把 <div draggable>、<code><div draggable="true">、<code><div draggable=""> 都视为可拖拽,但 <code>draggable="false" 明确禁用拖拽。
所以以下写法能捕获所有「启用了拖拽」的元素:
-
document.querySelectorAll('[draggable="true"], [draggable=""], [draggable]')—— 覆盖常见情况,但略冗余 -
推荐写法:
document.querySelectorAll('[draggable]:not([draggable="false"])')—— 精准排除被显式禁用的节点
遍历全量节点并判断 draggable 属性状态
如果需要更严谨地判断运行时实际是否可拖拽(例如受 JS 动态修改影响),可用 Element.hasAttribute() 和 Element.getAttribute() 组合判断:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
el.hasAttribute('draggable')为true,且el.getAttribute('draggable') !== 'false',才认为该元素启用拖拽 - 可配合
document.querySelectorAll('*')或document.getElementsByTagName('*')遍历(注意性能,页面过大时慎用)
注意可拖拽的默认行为
并非只有带 draggable 属性的元素才能拖拽:
- 图片(
<img>)、链接(<a href></a>)在多数浏览器中默认可拖拽,即使没写draggable属性 - 若需统一管理「所有可能被拖拽的节点」,建议额外加上:
img, a[href] - 可通过
ondragstart事件监听 +event.preventDefault()控制是否真正触发拖拽
实用的一行查询(兼顾准确性与简洁性)
以下代码返回所有「明确启用拖拽」且「非显式禁用」的元素:
document.querySelectorAll('[draggable]:not([draggable="false"])');如需包含默认可拖拽的 <img> 和 <a href></a>,可扩展为:










