1

我在我的应用程序的客户端使用 javascript,我需要根据 id、类和标记名获取元素,我正在使用以下代码获取使用id.

     HTML:
          <!Doctype>
          <html>
          <head>
          <script>
           (function (tag,fp,n) {
             var d = document;
             a = d.createElement(tag), m = d.getElementsByTagName(tag)[0];
             a.async = 1;
             a.src = fp;
             m.parentNode.insertBefore(a, m)
            })('script', 'cs.js', 'cs');
          </script>

         </head>
         <body>

           <div id="id">click me</div>
          </body>
          </html>


  javascript(cs.js):

 ;(function(w, d) {
       var util  = {
      getElements : function(selector) {

        var result = [];
        var hashIndex = selector.indexOf("#");
        var dotIndex = selector.indexOf(".");

        if(hashIndex > -1){
            selector = selector.substring(hashIndex+1);
            var domElem = d.getElementById(selector);
            console.log(domElem);
            if(domElem !=null){
                result.push(domElem);
            }
        }
        else if(dotIndex > -1){
            selector = selector.substring(dotIndex+1);
            var domElem =  d.getElementsByClassName(selector);
            if(domElem !=null){
                result = domElem;
            }

        }else{
            var domElem = d.getElementsByTagName(selector);
            if(domElem !=null){
                result = domElem;
            }
        }

        return result;
    }
  };

  console.log(util.getElements("#id"));


})(window, document);

它在 chrome、firefox 中正常工作,但在 opera 中它给出了null.

Browser Info:Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 版本/12.15

这个问题的任何解决方法?

4

3 回答 3

3

您的<script>元素出现在<div>您尝试选择的元素之前。

使用async并不能保证 DOM Ready 事件会在脚本运行之前触发。

移动脚本,使其稍后出现在文档中,或将其绑定到事件处理程序。

于 2013-05-03T09:01:26.490 回答
0

也许您可以尝试通过“name”-attribute 为 domElement 命名并执行以下操作:

var domElement = document.getElementsByName("element_name")[0];
console.log(domElement);

我希望它是这样工作的。

于 2013-05-03T06:03:50.663 回答
0

我没有该版本的 Opera 来测试您的声明,但您可以考虑document.querySelector作为替代方案。

HTML

<div id="id"></div>

Javascript

var domElement = document.querySelector("#id");
console.log(domElement);

jsfiddle 上

@bergi 的更新

这是一个环境已被破坏的示例,这可能是设计中故意的(谁知道),无论如何,OP 无法控制所述环境。

document.getElementById = function () {
    return null;
};

var domElement = document.getElementById("id");
console.log(domElement);

domElement = document.querySelector("#id");
console.log(domElement);

jsfiddle 上

哦,亲爱的,getElementById不起作用,但querySelector确实如此。

我不同意这个问题含糊不清,但仍然......

于 2013-05-03T06:35:37.907 回答