2014-01-29 2 views
0

HTMLУдаление только одна ссылка, которая должна быть удалена из списка

<a href="/portfolio/${portfolio.id}" data-portfolio-id="${portfolio.id}" data-bookmark-id="${bookmark.id}" class="ac-hns"> 
    <span>${portfolio.title}</span> 
    <span>By ${portfolio.ownerName}</span> 
    <img src="${portfolio.coverImage()}" alt=""> 
</a> 
<a href="/portfolio/${portfolio.id}" data-portfolio-id="${portfolio.id}" data-bookmark-id="${bookmark.id}" class="ac-hns"> 
    <span>${portfolio.title}</span> 
    <span>By ${portfolio.ownerName}</span> 
    <img src="${portfolio.coverImage()}" alt=""> 
</a> 

JS

$('.ac-hns').on('click', '.icn-close-white', function (e) { 
    e.preventDefault(); 
    deleteBookmarkItem($(this), $(this).parent().attr('data-portfolio-id'), $(this).parent().attr('data-bookmark-id')); 
}); 


function deleteBookmarkItem(btn, itemID, bookmarkID) { 
    $.ajax({ 
     url: '/api/bookmarks/'+ bookmarkID, 
     type: 'DELETE', 
     success: function(response) { 
      $('.ac-hns').remove(); 
      console.log('delete portfolio from bookmark'); 
     } 
    }); 
} 

Элементы являются динамическими с помощью JSON. Если удалить один из элементов в списке, скажите 3 элемента под одной и той же закладкой, один элемент должен быть удален под одной и той же закладкой, и он больше не будет на одной закладке.

Но прямо сейчас нажмите на значок закрытия на одном из элементов, все элементы будут удалены под одной и той же закладкой, которая является неправильной.

Справка или проницательность оценили.

Обновление Просто реализуйте - удалите данные из закладки-id = "$ {bookmark.id}" из тега, и она не появится в списке закладок. Я попробовал removeData ('data-bookmark-id'), но он не принимает идентификатор закладки.

ответ

0

Потому что $('.ac-hns').remove(); удаляет весь элемент с классом .ac-hns.

Вы должны указать на своем скрипте, какой элемент с классом .ac-hns должен быть удален.

И так как вы хотите, чтобы изменить всю группу, его родители, включая другие дочерние элементы, сделать это $(itemID).remove();

Edit: также $(this).parent().attr('data-portfolio-id') при передаче в качестве параметра, удалите .attr поэтому он будет передавать только родитель и таким образом, когда вы $(itemID).remove();, скрипт сможет узнать, какой из родительских элементов он удаляет, включая этот элемент, включая его дочерние элементы.

+0

спасибо - я последовал примеру Уилла - $ («[дата-портфолио-ID =„'+ Itemid +“]») удалить.(); элемент исчезает, но после одного элемента он показывает ошибки hmm – kittymeows

0

$('.ac-hns').remove(); в обратном вызове удаляет все с этим классом. Трудно сказать, с вашей HTML структуры, но я думаю, что вы хотите что-то вроде этого:

function deleteBookmarkItem(btn, itemID, bookmarkID) { 
    $.ajax({ 
     url: '/api/bookmarks/'+ bookmarkID, 
     type: 'DELETE', 
     success: function(response) { 
      $('[data-bookmark-id="'+bookmarkID+'"]').remove(); 
      console.log('delete portfolio from bookmark'); 
     } 
    }); 
} 
+0

да, это то, что я ищу. но кажется, что он удаляет почти все? Я не уверен, пока не тестирую более одного элемента в той же группе закладок. Возможно, ajax не нужно удалять? – kittymeows

+0

Не видя вашего полного html, я не мог сказать, почему он удаляет почти все. Например, 'cly-ac-hns' не существует в вашем примере html! Предполагая, что каждый элемент '' имеет уникальный атрибут * data-bookmark-id *, '$ ('[data-bookmark-id ="' + bookmarkID + '"]'). Remove();' должен удалить только этот , – Will

+0

Да, вы правы, и я исправил имя. он работает, если я использую itemID вместо этого, и он будет не привязан к закладке. – kittymeows

Смежные вопросы