首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AJAX成功时,jQuery无法删除多个相邻元素

在AJAX成功时,jQuery无法删除多个相邻元素
EN

Stack Overflow用户
提问于 2017-01-31 00:51:38
回答 1查看 29关注 0票数 0

我试图弄清楚为什么我无法删除成功的ajax删除中的多个相邻元素。当我在下面的代码中单独使用$(".file-preview").filter("a[href='" + fileLink + "']").remove();时,我能够删除第一个链接,当我在它之后添加$(".remove-file").data("file-link", fileLink).remove();时,它会破坏第一个.remove()语句,并删除所有当前的.remove-file,而忽略链接中传递给data-file-link属性的值。

(一)为什么第一次移除会被第二次移除打破?

2)是否有更好的方法来实现我想要达到的目标,即在单击.remove-file时删除两个相邻的元素

这里是HTML外观的一个例子:

代码语言:javascript
复制
<div class="file-section>
    <div class=" file-preview ">
    <a href="https://test-bucket.s3.amazonaws.com/1/2017-01-30/screen-shot-2017-01-08-at-12.23.39-pm.png ">https://test-bucket.s3.amazonaws.com/1/2017-01-30/screen-shot-2017-01-08-at-12.23.39-pm.png</a>
    <a href="# " class="remove-file " data-file-link="https://test-bucket.s3.amazonaws.com/1/2017-01-30/screen-shot-2017-01-08-at-12.23.39-pm.png "><span class="glyphicon glyphicon-remove "></span></a>
    </div>
    <div class=" file-preview ">
    <a href="https://test-bucket.s3.amazonaws.com/1/2017-01-30/screen-shot-2017-01-08-at-12.23.39-pm.png ">https://test-bucket.s3.amazonaws.com/1/2017-01-30/screen-shot-2017-01-08-at-12.23.39-pm.png</a>
    <a href="# " class="remove-file " data-file-link="https://test-bucket.s3.amazonaws.com/1/2017-01-30/screen-shot-2017-01-08-at-12.23.39-pm.png "><span class="glyphicon glyphicon-remove "></span></a>
    </div>
</div>

jQuery:

代码语言:javascript
复制
 $(document).on('click', '.remove-file', function(){
        console.log('Delete Triggered');
        var fileLink = $(this).data('file-link');

        function pathExtract(url){
            var fullUrl = url;
            var delimiter = '/';
            var start = 3;
            var tokens = fullUrl.split(delimiter).slice(start);
            var path = tokens.join(delimiter);
            return path;  
        }

        $.ajax({
            url: '/app/sign?' + $.param({"file": pathExtract(fileLink)}),
            type: 'DELETE',
            success: function(){
                console.log('This is the file link ' + fileLink);
                $(".file-preview").filter("a[href='" + fileLink + "']").remove();
                $(".remove-file").data("file-link", fileLink).remove();
            },
            error: function(error){
                console.log('error ' + JSON.stringify(error));
            }
        });
    });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-31 01:07:56

.data("file-link", fileLink)不是一个过滤器,它设置所选元素的数据。它只是返回被调用的集合,所以当您对结果调用.remove()时,它会删除remove-file类中的所有元素。

如果只想删除带有该数据值的元素,请使用.filter()

代码语言:javascript
复制
$(".remove-file").filter(function() {
    return $(this).data("file-link") == fileLink;
}).remove();

此代码:

代码语言:javascript
复制
$(".file-preview").filter("a[href='" + fileLink + "']").remove();

由于a元素位于.file-preview DIV中,因此无法工作,但是.filter()测试元素本身是否与过滤器匹配。你应该写:

代码语言:javascript
复制
$(".file-preview:has(a[href='" + fileLink + "'])").remove();

来测试内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41948017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档