javascript internet explorer array issues

javascript internet explorer array issues

本文关键字:issues array explorer internet javascript      更新时间:2023-09-26

我知道Internet Explorer <9在Javascript数组方面有问题。 我尝试过使用权宜之计,但我一辈子都无法解决这个问题。

基本上,我有这段代码(精简方式):

YUI.add('query-params', function (Y) {
  Y.QueryParams = {
  /**
  Parses our query string and returns an object containing the k/v pairs passed
  in rules
  @method parse
  @param {String} query string to parse
  @param {RegExp} regex rules to compare our query string against
  @return {Object} returns an object containing the k/v pairs that match
  */
  parse: function (qs, rules, params) {
    qs = qs.replace('?', ''); // remove ? from query string
    qs = qs.replace(/'+/g, ' ');
    var matches = rules.exec(qs);
    var defined_matches = Y.Array.filter(matches, function(m) {
      return ((typeof m != 'undefined') || ( m == true ));
    });
// rest of script omitted 

它被初始化为:

  <script>
  YUI({
    modules: {
      'query-params': {
        fullpath: './parse_search_terms.js'
      }
    },
    onFailure: function (error) {
      console.log(JSON.stringify(error));
    }
  }).use('node', 'console', 'query-params', function (Y) {
    var params = Y.QueryParams.parse(window.location.search, /('w+)'s('w+)'s('w+)|('w+)'s('w+)/ig, ["firstName", "lastName", "state"]);
    var url = "url_to_send_to?firstName=" + params.firstName + "&lastName=" + params.lastName + "&state=" + params.state;
    var iframe = Y.Node.create('<iframe></iframe>').setAttrs({
      src: url,
      frameBorder: 'no',
      height: 300,
      width: 800,
      scrolling: 'no'
});
    Y.one('#iframe').appendChild(iframe);
});

当我传递像"q=john+smith+ca"这样的查询字符串和JSON.stringify匹配变量时,我在IE,Firefox和Chrome中得到的是这样的:

john smith ca,john,smith,ca,,

当我在阵列上调用Y.Array.filter时,Firefox和Chrome会做正确的事情:

defined ["john","smith","ca"]

但是,Internet Explorer 8

defined ["john","smith","ca","",""]

因此,由于某种原因,IE无法正确过滤我的数组。 我已经尝试了上述所有阵列垫片和权宜之计,但似乎没有任何效果。 我认为这将非常跨浏览器高效,因为我使用的是 YUI3,但我被难住了。

有人有什么想法吗?非常感谢帮助。

事实证明,如果未设置文档类型,IE会进入"怪癖模式"。 在页面顶部添加"修复了所有内容。