1

我正在 IE7 上测试一行代码,但它给了我以下错误:

对象不支持此属性或方法,它引用

这是有问题的问题线:

var checked = document.querySelector('[name="answer1"]:checked');

这是整个代码

问题1:你喜欢培训吗?

<input name="q4" value="Yes" type="radio"> Yes
<input name="q4" value="No" type="radio"> No
<br>
<button id="getval">cick here</button>

<script type="text/javascript"> 
document.getElementById('getval').onclick = function() {
    var checked = document.querySelector('[name="q4"]:checked');
    alert(checked ? checked.value : 'Not selected');
}
</script>

有没有办法解决这个问题?

4

4 回答 4

4

querySelector在 IE8+ 中可用。要在 IE7 中通过选择器进行查询,您需要Sizzle之类的东西,它是 jquery 中内置的 CSS 选择器查询代码的独立版本。或者,如果您更喜欢更轻、更无缝的东西,您可以使用此处描述的 polyfill ,如下所示:

if (!document.querySelectorAll) {
  document.querySelectorAll = function (selectors) {
    var style = document.createElement('style'), elements = [], element;
    document.documentElement.firstChild.appendChild(style);
    document._qsa = [];

    style.styleSheet.cssText = selectors + '{x-qsa:expression(document._qsa && document._qsa.push(this))}';
    window.scrollBy(0, 0);
    style.parentNode.removeChild(style);

    while (document._qsa.length) {
      element = document._qsa.shift();
      element.style.removeAttribute('x-qsa');
      elements.push(element);
    }
    document._qsa = null;
    return elements;
  };
}

if (!document.querySelector) {
  document.querySelector = function (selectors) {
    var elements = document.querySelectorAll(selectors);
    return (elements.length) ? elements[0] : null;
  };
}
于 2013-11-17T13:14:16.100 回答
2

旧的 IE 没有querySelector. 您必须使用引擎,例如 sizzle(这就是 jQuery 中的内容)、zest 等

于 2013-03-24T17:13:44.617 回答
1

在 IE 9+ css3 选择器中,您正在使用的选择器受支持..

http://caniuse.com/queryselector

于 2013-03-24T17:15:45.560 回答
0

您可以参考created-a-queryselector-for-ie-that-runs-at-native-speed添加-document-queryselectorall-support-to-ie-7

好的,您可以使用 jquery $('#selector') ,因为它等于 queryselector,您可以为此包含 jQuery。

于 2013-11-17T11:52:46.007 回答