在下面的代码中,我包含了一个用于调试的属性。在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;
}
答案 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;
}
}