2015-10-14 2 views
1

Я пытаюсь получить этот код для сортировки на основе заголовка, но отобразить заголовок с гиперссылкой. Пока код сортируется правильно, но гиперссылки arent отображаются правильным заголовком. Кажется, что он помещает ссылки списка в алфавитном порядке по названию, затем ссылки на дочерние сайты упорядочены по заголовку.Сортировка массивов гиперссылок

Я хочу:
Первый Subsite (www.test.com/firstsubsite)
Google (www.google.com) // < -В список
Последняя Subsite (www.test.com/lastSubsite)
Yahoo (www.yahoo.com) // < - В списке

В настоящее время я получаю:
Первый Subsite (www.google.com) // < -В список
Google (www.yahoo.com) // < - В списке
Последний Subsite (www.test.com/firstsubsite)
Yahoo (www.test.com/lastSubsite)

function GetItems() { 
 
    var names = []; 
 
    var link = []; 
 
    $().SPServices({ 
 
     operation: "GetListItems", 
 
     async: true, 
 
     listName: "GatheredSites", 
 
     CAMLViewFields: "<ViewFields><FieldRef Name='Title' /><FieldRef Name='Link_x0020_Url' /></ViewFields>", 
 
     completefunc: function(xData, Status) { 
 
      $(xData.responseXML).SPFilterNode("z:row").each(function() { 
 
       var url = $(this).attr("ows_Link_x0020_Url").split(",")[0]; 
 
       var name = ($(this).attr("ows_Title")); 
 
       names.push(name); 
 
       link.push(url); 
 
      }); 
 
      $().SPServices({ 
 
       operation: "GetWebCollection", 
 
       webURL: "*url*", 
 
       async: true, 
 
       completefunc: function(xData, Status) { 
 
        $(xData.responseXML).find("Webs > Web").each(function() { 
 
         var $node = $(this); 
 
         names.push($node.attr("Title")); 
 
         link.push($node.attr("Url")); 
 
        }); 
 
        names.sort(); 
 
        var output = $("#divDisplay"); 
 
        for (var i = 0, len = names.length; i < len; i++) { 
 
         output.append("<li><a href='" + link[i] + "'>" + names[i] + "</li>"); 
 
        } 
 
       } 
 
      }); 
 
     } 
 
    }); 
 
}

ответ

2

После сортировки массива names вы не сможете сопоставить соответствующий индекс в массиве links.

Вы можете создать объект, который имеет как имя, так и ссылку на каждой итерации xml и нажимать этот объект в один массив.

Затем сортировать единый массив объектов по имени собственности

$(xData.responseXML).find("Webs > Web").each(function() { 
    var $node = $(this); 
    // single object to store all needed properties from xml 
    var item = { 
     name: $node.attr("Title"), 
     link: $node.attr("Url") 
    } 
    // push object to array 
    names.push(item); 
    // link.push($node.attr("Url")); - remove links array, no longer needed 
}); 
// sort array by name property 
names.sort(function (a, b) { 
    return a.name > b.name 
}); 
var output = $("#divDisplay"); 

for (var i = 0, len = names.length; i < len; i++) { 
    // note properties used for link and name 
    output.append("<li><a href='" + names[i].link + "'>" + names[i].name + "</li>"); 
}