jquery выполняет поиск текста метки для существующих вхождений

#jquery

#jquery

Вопрос:

Я добавляю теги к метке по щелчку мыши, выполняя следующие действия в jQuery

 $('.addTag').live('click', function () {

    $('.pendingTags').html($('.pendingTags').html()   $('.newTag').val()   ', ');

});
  

Но что мне нужно сделать, это посмотреть $('.newTag').val() , существует ли уже в тексте / html .pendingTags

Есть идеи, как я могу это сделать?

Спасибо

Комментарии:

1. Добавьте больше деталей. Какой разделитель между тегами?

2. Извините, понял, что этого не было в коде, обновил код разделителем, который является запятой

Ответ №1:

Используйте .text() метод, а не .html() метод. Кроме того, вы должны добавить запятую перед новым тегом.

 $('.addTag').live('click', function () {
    var currentTags = $('.pendingTags').text();  // Get current labels
    var newTag = $('.newTag').val();             // Get new label
    var listOfTags = currentTags.split(',');     // Create list of labels
    for(var i=0, l=listOfTags.length; i<l; i  ) {// Loop through each
        if(listOfTags[i] == newTag) return;      // If the label exists, return
    }
    var sep = /^s $/.test(currentTags) ? "" : ","; // Create separator
    $('.pendingTags').text(currentTags   sep   newTag); //Not returned, add label
});
  

Ответ №2:

 $('.addTag').live('click', function () {

    if(!containsTag($('.pendingTags').html())
      $('.pendingTags').html($('.pendingTags').html()   $('.newTag').val()   ', ');
    else
      alert('you have it already');

});
function containsTag(val, tag)
{
   var tags = val.split(',')
   for(var i = 0; i < tags.length; i  )
    {
        if($.trim(tags[$i]).toLowerCase() == tag.toLowerCase())
           return true;
    }
   return false;
}
  

Я создал метод, который будет проверять, существует ли тег в списке тегов, без учета регистра.

Ответ №3:

Альтернативное решение (рабочий пример):

 $('.addTag').live('click', function () {
    var pending = $('.pendingTags').html();
    var newTag = $('.newTag').val();
    if((', '   pending).indexOf(', '   newTag   ', ') < 0) {
        $('.pendingTags').html(pending   newTag   ', ');
    }
});
  

Ответ №4:

Вы можете использовать jQuery.fn.filter() для фильтрации объекта jQuery на основе обратного вызова:

 $('.pendingTags')
//before adding the html, we filter the jquery set
.filter(function(){
  return $(this).text().split(', ').indexOf($('.newTag').val()) < 0;
})
//and only add the html to the new set
.html($('.pendingTags').html()   $('.newTag').val()   ', ');