2013-08-12 3 views
0

Я пытаюсь взять содержимое отдельных элементов списка в одном UL, а когда щелкнуть, добавьте значение этого индивидуального LI в array и добавьте текстовую строку элемента списка в элемент упорядоченного списка в другом месте страницы.Как я могу выполнить сравнение строк из элемента списка в элементах в массиве

У меня возникли проблемы с сравнением строки щелкнутого LI, итерации по массиву, чтобы убедиться, что строка LI указана один раз, а затем добавление текста в OL. Помогите оценить.

var list = $('.list'), 
    listItem = $('.list li'), 
    container = $('.list-content ul'), 
    containerItem = $('.list-items li'); 
    itemArray = []; 

    listItem.on({ 

     'click' : function(){ 
      var current = $(this), 
      currentText = $(this).text(); 

      if(itemArray.length <= 0) { 

       itemArray.push(currentText); 
       $('<li>'+ currentText + '</li>').appendTo(container); //add text to new area 

      }else{ 
       for(var count = 0; count < itemArray.length; count++){ 
        if(currentText === itemArray[count]){ 
         return false; 
         break; 
        } else { 
         itemArray.push(currentText); 
         $('<li>'+ currentText + '</li>').appendTo(container); //add text to new area 
         break; 
        } 
       } 
      } 

     }//end of click function 
    }); 
+0

Вы можете добавить некоторые примеры разметки, поэтому мы можем как это должно работать? Какие ошибки вы получаете? Что происходит в сравнении с тем, что вы ожидаете? – Mathletics

+0

В зависимости от вашего содержимого вы можете поместить свой текст в объект, а не в массив с текстом как свойство - таким образом вам не нужно цитировать массив и автоматически удалять дубликаты. – Christoph

+0

Спасибо большое, ребята .... вот полурабочий пример того, что я пытаюсь сделать http://jsfiddle.net/im_cr/KGHxw/18/ .... вы увидите в демо, что я могу сохранить добавление элементов, и я не хочу, чтобы это делалось .... если элемент существует во втором списке, я не хочу, чтобы его можно было добавить из первого списка .... –

ответ

0

Вы можете использовать $.inArray(), чтобы проверить, является ли объект присутствует в массиве

это должно сделать

var list = $('.list'), 
    listItem = $('.list li'), 
    container = $('.list-content ul'), 
    containerItem = $('.list-items li'), 
    itemArray = []; 



listItem.on({ 
    'click' : function(){ 
     var current = $(this), 
      currentText = $(this).text(); 

     if($.inArray(currentText, itemArray) == -1){ 
      itemArray.push(currentText); 
      $('<li>'+ currentText + '</li>').appendTo(container); //add text to new area 
     } 
    }//end of click function 

}); 

Демо: Fiddle

+0

или использовать «Array.prototype» ES5 .indexOf'. – Christoph

+0

@ Вопросы, связанные с поддержкой IE @ Christoph, –

+0

@Christoph Или, скорее, использовать '$ .inArray', потому что это не сработает в старом IE. Я знаю, что знаю, кто больше использует старый IE? И я знаю, что знаю, вы можете использовать полипол. Но когда вы включили jQuery, вы «могли бы» использовать «$ .inArray» (я отказываюсь, но я просто говорю) – Ian