使用jQuery NOT选择器来排除具有特定子元素的元素。
我有一个函数,它将一些HTML附加到元素。 它可能不止一次被调用,所以我只希望它将HTML附加到尚未添加HTML的元素中。
例:
因此,我想选择没有.myAppendedMarkup的直接孩子的所有.divToAppendTo
我的刺伤似乎不起作用:
$(".divToAppendTo:not(>span.myAppendedMarkup)")
它总是在我调用它时附加(从而复制内容)。
尝试
$("div.divToAppendTo:not(:has(span.myAppendedMarkup))")
要么
$("div.divToAppendTo").filter(function() { return $(this).children('span.myAppendedMarkup').length == 0; });
如果你不介意的话,我想我可能会为你想做的事情提供一个更简单的解决方案。
每当你将HTML附加到.divToAppendTo
做$(this).removeClass("divToAppendTo");
这样你只需要选择.divToAppendTo
同时确保它没有附加任何代码。
如果您将此类用于其他内容,则可以始终使用另一个类来执行此操作。
你可以做:
$(".divToAppendTo:not(:has(span.myAppendedMarkup))");
我喜欢它的可读性,它的效率与其他答案中最快的建议相当。
var completeSet = $( "div.divToAppendTo" ); var unwantedSet = completeSet.has( "span.myAppendedMarkup" ); var wantedSet = completeSet.not(unwantedSet);
如果您不需要保留className,请转到Soufiane的答案,否则这应该有效:
$('div.divToAppendTo').filter(function() { return $(this).html() == ''; }) );
或者,如果你期望.divToAppendTo
的其他HTML,那么使用:
$("div.divToAppendTo").filter(function() { return $(this).children('span.myAppendedMarkup').length == 0; });