获取对象的所有属性 - 不在IE中工作

时间:2011-08-12 19:03:57

标签: javascript jquery internet-explorer sharepoint-2010 attributes

在下面的代码中,我包含了一个用于调试的属性。在FF和Chrome中,我收到大量警报,说“发现属性”,但在IE中,我什么都没得到。该函数返回一个空数组。

我也尝试删除console.info(this)行。

顺便说一句,我正在使用SPServices访问SharePoint 2010中的列表 - 我正在尝试获取列表的所有列。

/*!
 * listAttributes jQuery Plugin v1.1.0
 *
 * Copyright 2010, Michael Riddle
 * Licensed under the MIT
 * http://jquery.org/license
 *
 * Date: Sun Mar 28 05:49:39 2010 -0900
 */

 //THIS ISN'T WORKING IN IE
if(jQuery) {
    jQuery(document).ready(function() {
        jQuery.fn.listAttributes = function(prefix) {
            var list = [];
            var attributes = [];
            $(this).each(function() {
                console.info(this);
                for(var key in this.attributes) {
                alert("attribute found");
                    if(!isNaN(key)) {
                        if(!prefix || this.attributes[key].name.substr(0,prefix.length) == prefix) {
                            attributes.push(this.attributes[key].name);
                        }
                    }
                }
                list.push(attributes);
            });
            return attributes;
        }
    });
}
//end listAttributes Plugin - use this to see what attributes 


function ImportSPListColumnsToArray(ListName)
{
    var ArrayForStorage = new Array();
$(document).ready(function() {


  $().SPServices({
    operation: "GetListItems",
    async: false,
    listName: ListName,
    CAMLViewFields: "",
    CAMLQueryOptions: "<QueryOptions><ViewAttributes Scope='RecursiveAll'/></QueryOptions>",
    **completefunc: function (xData, Status) {
      $(xData.responseXML).find("[nodeName='z:row']").each(function() {
      //find all fields used by each row and aggregate them without duplicating
      var row_attr = $(this).listAttributes();**
      for (var i=0; i<row_attr.length; i++)
        {
            if ($.inArray(ArrayForStorage, row_attr[i]) == -1)
                {
                    ArrayForStorage.push(row_attr[i]);
                }
        }
      row_attr.clear();
      });
    }
  });

});
  return ArrayForStorage;

}

2 个答案:

答案 0 :(得分:0)

我可能错了,但我相信你的问题是console.info(this);行。 IE没有开箱即用(you need to open Developer Tools first),所以你的脚本在那时失败了。

答案 1 :(得分:0)

想出来。

IE显然无法识别this.attributes在每个循环中的长度。

所以我只是通过它们进行了迭代,它起作用了。

if(jQuery) {
        jQuery.fn.listAttributes = function() {
            var attributes = new Array();
            $(this).each(function() {
                for (var i=0; i<this.attributes.length; i++)
                {
                    attributes.push(this.attributes.item(i).nodeName);
                }
            });
            return attributes;
        }
}