Это первая ссылка в Google при поиске "jquery not has". Конкретный сценарий, который мне нужно было решить, немного отличался от этого. Мне пришлось not
элементов, которые имеют определенный элемент DOM, а не просто на основе тега. Это означало, что я не мог использовать селектор, который использовался в каждом решении выше.
jQuery's has()
однако принимает элемент DOM! Поэтому я создал плагин jQuery для объединения этих двух встроенных функций.
Я хотел бы поделиться этим здесь, потому что, надеюсь, это поможет другим в моей ситуации. Это также отвечает на оригинальный вопрос.
Плагин:
(function ( $ ) {
$.fn.extend({
not_has: function (param) {
return this.not(this.has(param));
}
});
}( jQuery ));
Реализация:
$("a.add-span").click(function() {
$("li").not_has("span")
.append('<span class="spn">new span<\/span>');
// Prevent the page from navigating away
return false;
});
https://jsfiddle.net/brjkg10n/1/
Я изначально намеревался найти функцию jQuery, которая бы работала как addBack()
, но вместо этого использовала not
Если вам нужно что-то настолько сложное, пожалуйста, используйте следующий плагин.
(function ( $ ) {
$.fn.extend({
notBack: function () {
return this.prevObject.not(this);
}
});
}( jQuery ));
При этом ответ будет:
$("li").has("span").notBack()
.append('<span class="spn">new span<\/span>');
https://jsfiddle.net/2g08gjj8/1/