#jquery #sharepoint
#jquery #sharepoint
Вопрос:
Я новичок в пространстве jquery и надеюсь многому научиться с помощью Stackoverflow.
У меня есть элемент данных списка Sharepoint 2010, который имеет тип данных выбора, позволяющий пользователю устанавливать флажки более чем на одно значение. Я использую SPService для получения элементов списка. Ниже приведен код:
$().SPServices({
webURL: 'http://abc.def.com/Products',
operation: 'GetListItems',
listName: listName,
async: false,
CAMLQuery: query,
CAMLViewFields: fields,
CAMLRowLimit: 11,
completefunc:
function (xData, Status)
{ $(xData.responseXML).find("[nodeName=z:row]").each(function ()
{
$("#ProdList").val("-1");//Pre-filled with selected val.
var myProd= $(this).attr("ows_Prod"); //displays in this format ;#myProd1;#myProd2;#
//Here 1. i want to store myProd as an array.
2. eliminate ;#
3. store final array elements as myProd1, myProd2
4. Display myProd1
myProd2
in the dropdown list.
//
$("#ProdList").append('<option>' myProd '</option>');
});
}
});
});
<body>
<select class="Dropdowns" id="ProdList">
<option value="-1">My ProdLists</option>
</select>
</body>
Any pointers? Thanks.
Ответ №1:
Немного сложно понять, в чем специфика вашего вопроса. Я предполагаю, что комментарии в вашем коде описывают вопрос. В следующий раз я бы посоветовал вам быть более конкретным с деталями вашего вопроса в тексте, а не в коде. Но, учитывая это, вот мое предположение о том, что вы пытаетесь сделать.
У вас есть строка, которая выглядит следующим образом:
";#myProd1;#myProd2;#"
И вы хотели бы получить myProd1
и myProd2
в массив, а затем из этого массива добавить в выпадающий список.
// get product list
var myProd = $(this).attr("ows_Prod");
// clean up the ends
myProd = myProd.replace(/^;#|;#$/g, "");
// split into pieces
var myProdArray = myProd.split(";#");
// add each piece as an option to the drop-down
for (var i = 0; i < myProdArray.length; i ) {
$("#ProdList").append('<option>' myProdArray[i] '</option>')
}
Вы можете отсортировать массив в порядке словаря с помощью:
myProdArray.sort();
Вы можете удалить дубликаты из отсортированного массива с помощью этого:
var noDupArray = [];
noDupArray.push(myProdArray[0]);
for (var i = 1; i < myProdArray.length; i ) {
if (myProdArray[i] != myProdArray[i-1]) {
noDupArray.push(myProdArray[i]);
}
}
Итак, если вы хотите одновременно сортировать и удалять дубликаты, вы можете использовать этот код:
var myProd = $(this).attr("ows_Prod");
myProd = myProd.replace(/^;#|;#$/g, "");
var myProdArray = myProd.split(";#");
// sort
myProdArray.sort();
// remove dups
var noDupArray = [];
noDupArray.push(myProdArray[0]);
for (var i = 1; i < myProdArray.length; i ) {
if (myProdArray[i] != myProdArray[i-1]) {
noDupArray.push(myProdArray[i]);
}
}
// add each piece as an option to the drop-down
for (i = 0; i < noDupArray.length; i ) {
$("#ProdList").append('<option>' noDupArray[i] '</option>')
}
Комментарии:
1. Большое спасибо jfriend00. Это сработало. В следующий раз я обязательно постараюсь быть более конкретным в описании вопроса. Еще раз спасибо за вашу помощь. 🙂
2. Как мне убедиться, что в моем выпадающем списке нет дубликатов для приведенного выше кода? Я также хочу, чтобы мой myProdArray был отсортирован (ASC). Какие-либо указатели? Спасибо.
3. Сортировка и дедупликация добавлены к моему ответу.
4. У меня есть два элемента списка, и они имеют одинаковые значения для myProd. Например. допустим, SharePoint2010 Я должен убедиться, что я помещаю SharePoint 2010 только один раз в выпадающий список. С помощью приведенного выше кода я не смог устранить дублирование. Какие-либо рекомендации, пожалуйста? Большое спасибо за оперативный ответ.
5. Кажется, это нормально работает здесь, в этом примере jsfiddle.net/jfriend00/yCauH если реализовано, как указано выше. В атрибуте есть несколько дубликатов, но в раскрывающемся списке нет дубликатов. Если вам нужна дополнительная помощь, вам нужно будет показать свою фактическую реализацию.