#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() ', ');