我有一些列表项,其中包含一个div,其中包含一个链接。我想从所有div中删除此链接。这是我目前的职能:
jQuery('.post_meta').each(function(){
var el = jQuery('.post_meta a');
el.html(el.html().replace(/, Slider/ig, ""));
});
此函数复制一个div并将其内容添加到所有其他div。什么是正确的方式?
这是我的标记:
<ul>
<li>
<div class="post_meta">
<a href="#">Anything</a>, <a href="#">Slider</a>, <a href="#">Anything2</a>
</div>
</li>
</ul>
答案 0 :(得分:1)
好像你想要这样的东西:
$('.post_meta a').filter(function() {
return $.trim($(this).text()) === "Slider";
}).remove();
这会获取.post_meta
元素中的所有链接,并根据其内容过滤它们(文本是否为Slider
。然后删除这些元素。
更新:关于您的评论。删除逗号有点棘手,但您可以这样做(删除链接后):
$('.post_meta').each(function(){
$.each($(this).contents(), function() {
if(this.nodeType === 3) {
this.nodeValue = this.nodeValue.replace(/,\s*,/g, ',');
}
});
});
虽然可能不太高效......
更新2:显然删除逗号不起作用,因为在删除元素节点后,您有两个相邻的文本节点,而不是一个。
但这有效:
$('.post_meta').each(function(){
var c = $(this).contents();
$.each(c, function(i) {
var prev = c[i-1];
if(this.nodeType === 3
&& prev
&& prev.nodeType ===3
&& $.trim(this.nodeValue) === $.trim(prev.nodeValue)) {
this.parentNode.removeChild(this);
}
});
});
这基本上删除了重复的相邻文本节点。
为什么我这么复杂?
因为它看起来可能有链接的JavaScript事件处理程序,如果你得到并设置HTML,这些处理程序将丢失。
如果不是这种情况并且HTML真的是这样,你可以这样做:
jQuery('.post_meta').html(function(i, html) {
return html.replace('<a href="#">Slider</a>,','');
});
但如上所述,这只有在以下情况下才有效:(a)HTML与字符串完全匹配;(b)您没有将任何事件处理程序绑定到链接(它们将丢失)。
答案 1 :(得分:0)
你使用每个但不填写函数参数,应该是:
.each( function(index, Element) )
el是所有post_mpeta的所有链接
您可以删除以下链接:$(el).find('a').remove();
(在每个循环中)
我不知道你在做什么替换HTML
答案 2 :(得分:0)
我认为你想要做的是:
$(".post_meta a").remove();
如果您想清除所有其他文字:
$(".post_meta").empty();
<强>更新强>
是否可以更改标记?我建议在你想要移除的锚点上添加一个类,例如:
<ul>
<li>
<div class="post_meta">
<a href="#">Anything</a>, <a href="#" class="slider">Slider</a>, <a href="#">Anything2</a>
</div>
</li>
</ul>
然后你可以这样做:
$(".post_meta a.slider").remove();
答案 3 :(得分:0)
然后执行此操作:
var temp = $(el).find('a');
var txtVal = temp.text();
if(txtVal == "Slider")
{
temp.remove();
}