javascript - 检查 CSS 选择器是否有效

标签 javascript css-selectors

我有一个供用户输入 CSS 选择器的字段,我想检查它是否有效(根据 css3 specification )。我尝试使用 css3 specification 中的表达式正如 another stackoverflow topic 中所建议的那样, 但它不起作用 - 我构建的正则表达式与有效的选择器不匹配。我现在所拥有的只是:

try {
     document.querySelector(selector);
} catch (e) {
     // handle bad input
}

但这似乎不是一个好的解决方案 - querySelector 函数是为获取元素而设计的,检查选择器只是一个副作用。此外,它不提供有关选择器问题的任何信息。

我正在寻找类似 document.validateSelector 或用于解析 CSS 选择器的库。

最佳答案

原始思路的问题是它会搜索整个文档。 🤨 !

然而,搜索一个甚至没有附加到 DOM 的空轻量级元素是快速✌️!

const queryCheck = (s) => document.createDocumentFragment().querySelector(s)

const isSelectorValid = (selector) => {
  try { queryCheck(selector) } catch { return false }
  return true
}

console.assert(isSelectorValid('p > > > a') === false)
console.assert(isSelectorValid('p > a') === true)
console.log('Test passed')

以下版本使用虚拟片段外壳更高级一些:

const isSelectorValid = ((dummyElement) =>
  (selector) => {
    try { dummyElement.querySelector(selector) } catch { return false }
    return true
  })(document.createDocumentFragment())
  
console.assert(isSelectorValid('p > > > a') === false)
console.assert(isSelectorValid('p > a') === true)
console.log('Test passed')

关于javascript - 检查 CSS 选择器是否有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34849001/

相关文章:

javascript - 我无法使用 JavaScript 来播放图像幻灯片

javascript - 我想将 JSON 值拆分为两个值

html - 属性选择器的特殊性是什么?

CSS 3 nth of type 仅限于类

javascript - 第 n 个子级之前/之后的 body.innerHTML

javascript - 当 p 标签接近时向下移动元素

javascript - 如何检测 HTML 中 pdf 对象的点击事件

javascript - 如何添加或包装每个标签和 div?

html - 无法加载资源: the server responded with a status of 404 (Not Found) http://localhost:5266/Content/fonts/glyphicons-halflings-regular. woff2

jQuery 选择器帮助 - 我可以通过单击元素生成选择器吗?