javascript - 测试浏览器是否支持 CSS 选择器

标签 javascript css internet-explorer-8 cross-browser css-selectors

非常简单:如何最准确地测试浏览器是否支持某个 CSS 选择器?

我目前有一些 CSS 代码,通过在 CSS 中使用 :checked 选择器使页面更具交互性,但我想创建一个后备脚本,用 JavaScript 做同样的事情,但是仅当用户的浏览器不支持 :checked 选择器时。

我的问题是,如何最准确地测试用户的浏览器是否支持某个 CSS 选择器?

这是我想使用它的代码:

HTML:

<label class="coolbox">
    <input type="checkbox"/>
    <span>I want to eat some caek.</span>
</label>

CSS:

.coolbox input {display:none;}
.coolbox span::before {
    content: "";
    display:inline-block;
    width:10px;
    height:10px;
    margin-right:5px;
    border:1px solid black;
}
.coolbox:hover span::before {border:1px solid #555;}
.coolbox:active span::before {border:1px solid #999;}

.coolbox span::before {background-color:#F77;}
.coolbox input:checked + span::before {background-color:#4A4;}

Demo

PS:我不想只使用条件注释,因为我想遵循检测功能而不是浏览器的标准。

最佳答案

你可以使用querySelector:

function testSelector(selector, node){
  var scope = document.createElement("div");
  scope.appendChild(node);

  try {
    return scope.querySelector(selector) !== null;
  } catch(e) { return false; }
}

你可以这样测试:

var node = document.createElement("input");
node.type = 'checkbox';
node.checked = 'checked';

testSelector("input:checked", node); // === true

参见 this other question有关 querySelector 的更多信息。

关于javascript - 测试浏览器是否支持 CSS 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21094865/

相关文章:

javascript - 如何使用 Ajax 将变量从 PHP 发送到 javascript?

css - Chrome 中的不平衡 CSS 列

html - 一个元素被filter或者其他原因调整时如何调整它的位置

css - 什么范围的 CSS 选择器允许我覆盖 mdDialog 容器宽度?

javascript - IE8无法计算Math.ceil()

javascript - 如何使用 jQuery 过滤具有多个选择组的结果?

javascript - 不使用按钮显示列表,带 knockout

javascript - 如何 grep JavaScript 或 jQuery 中包含的 JSON 数组

javascript - IE8 是否存在 JS 开关问题?

html - Internet Explorer 8 背景色环绕在下方