Получить все атрибуты объекта - не работает в IE - PullRequest
1 голос
/ 12 августа 2011

В следующем коде я включил атрибут для отладки.В 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 голосов
/ 17 августа 2011

Разобрался.

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;
        }
}
0 голосов
/ 12 августа 2011

Я могу ошибаться, но я считаю, что ваша проблема в строке console.info(this);. IE не имеет этого готового решения (, вам нужно сначала открыть Инструменты разработчика ), поэтому в этот момент ваш скрипт не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...