我在我的应用程序的客户端上使用javascript,我需要基于id,class和tagname获取元素,我正在使用以下代码使用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

这个问题有解决方法吗?

最佳答案

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

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

移动脚本,使其在文档的后面显示,或将其绑定到事件处理程序。

关于javascript - getElementById在Opera 12.15中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16352590/

10-13 00:37