如何从 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的主要内容,如果未能解决你的问题,请参考以下文章