如何从 AJAX 响应中删除所有 href

Posted

技术标签:

【中文标题】如何从 AJAX 响应中删除所有 href【英文标题】:How to remove all href from an AJAX response 【发布时间】:2013-05-23 19:02:38 【问题描述】:

我正在导入一个 html 文件,我想从其中的所有元素中删除所有 href,因此最终文本不会链接到任何地方并且看起来像“普通”文本。

我已经从这个 HTML 中提取了 div#divvy 的一部分,因此删除 href 的过程必须对其有效,而不是对所有响应。

最终结果应该发给div#pepeland

我有这个代码:

function pepe()
    $.ajax(
        url: 'http://www.site.com/text.html',
        dataType: 'html',
        success: function(response)
            $('#pepeland').html(jQuery(response).find('#divvy').html());
        
    );
;

我认为但不确定是否应该在上面的代码中插入类似以下几行的内容,但我不知道该怎么做。

$(response).querySelectorAll("href").remove();

$(response).attr('href', '');

response.replace("href", '');

在下面的答案中,我意识到我想要的是删除所有标签而不删除文本。因为单词的格式始终带有下划线和标签的所有属性。所以烤写了我的正确答案,见下文!

【问题讨论】:

您的response 在技术上不可用。您必须基本上附加来自您的帖子的 HTML,然后在该帖子下写一行以查找附加的 html 中的特定链接 他的回复是这样的。当您将返回的数据包装为 jQuery 对象 $(data) 时,您现在可以在其上使用 jQuery 方法和选择器,因此 $(response).find('[href]').prop('href', ''); 将在响应中查找具有 href 属性的任何元素,然后将获取该属性并更改它什么都不是。 @Ohgodwhy 谢谢,我已经纠正了。 .removeAttr() 怎么样? 您不应该在正文中提及正确答案,这就是赞成票,更准确地说是您的“已接受答案”的目的。 AFAIK,您没有投票的特权,但应该可以为您提供接受的答案。请使用那些。总而言之,最后一段似乎没有必要。一个问题应该是一个问题,一个答案应该是一个答案,每个问题都应该独立存在。 【参考方案1】:

我需要查看您的 html 文件以了解如何选择元素,但您需要遍历所有元素以全部替换它们。所以像这样......

$('YOUR SELECTOR').each(function()
      $(this).contents().unwrap();
);

这将取消锚标记并使其成为纯文本。

类似于这个问题的答案..Remove a HTML tag but keep the innerHtml

【讨论】:

应该是.contents() 而不是.contents $(this) 将引用您的选择器来启动每个功能,如果没有您的 HTML,我无法真正告诉您选择器应该是什么......但它可能类似于 $ ('#pepeland a').each(function...etc. 完美!我把这个和烤过的答案混合在一起(下)。谢谢!! :) @sergius“下面的答案”是一个误导性的概念,因为由于投票的原因,答案可能会以不同的顺序出现。因此,如果您想参考另一个答案,请使用其共享链接。另外,不需要通过 cmets 表示感谢,这就是投票的目的。【参考方案2】:

我会这样做:

$.ajax(
    url: 'http://www.site.com/text.html',
    dataType: 'html',
    success: function(response)
        $('#pepeland').html(response);
        $('#pepeland a').removeAttr('href');
    
);

这将删除附加 html 内所有链接上的 href 属性

【讨论】:

你试过@ohGodWhy 在他的帖子中所说的吗?然后使用removeAttr()? 是的,它部分有效。看到烤cmet,我修改了我的需求,不好意思,我第一次在这里问。【参考方案3】:

试试这个:

function pepe()
    $.ajax(
        url: 'http://www.site.com/text.html',
        dataType: 'html',
        success: function(response)
            var $divvy = $(response).find('#divvy');
            $divvy.find('a').each(function()$(this).replaceWith($(this).text()));
            $('#pepeland').html($divvy);
        
    );
;

【讨论】:

哦,可以了,谢谢!但我意识到我想要的是删除所有 标记而不删除文本。因为单词的格式始终带有下划线和 标签的所有属性。我应该开始一个新问题吗? 使用 remove() 查看更新的答案。也许你可以使用 unwrap() 如果例如在某些链接标签 () 中嵌套了 img 哦,但是 里面的文字也被删除了。我怎样才能保存它?

以上是关于如何从 AJAX 响应中删除所有 href的主要内容,如果未能解决你的问题,请参考以下文章

ajax响应后如何在jquery中刷新表单[重复]

如何从 JSON 响应中删除不需要的标签

如何从 ExtJs 中的 ajax 响应更新“href”

如何从RabbitMQ删除所有队列

如何从 Azure Functions 的 HTTP 响应中删除标准标头?

如何从python中的文本文档中删除所有标点符号和其他符号?