Это обычно происходит при непосредственном использовании функции с empty
.
Пример:
if (empty(is_null(null))) {
echo 'empty';
}
Это связано с тем, что empty
- это языковая конструкция, а не функция, она не может быть вызвана с выражением в качестве аргумента в версиях PHP до 5.5. До PHP 5.5 аргумент empty()
должен быть переменной , но произвольное выражение (такое как возвращаемое значение функции) допустимо в PHP 5.5 +.
empty
, несмотря на его имя, на самом деле не проверяет, является ли переменная «пустой». Вместо этого он проверяет, существует ли переменная, или == false
. Выражения (например, is_null(null)
в примере) всегда будут считаться существующими, поэтому здесь empty
проверяет только, равен ли он false. Здесь вы можете заменить empty()
на !
, например. if (!is_null(null))
, или явно сравнить с ложным, например. if (is_null(null) == false)
.
Вопросы, относящиеся
Если я понимаю Вас правильно:
$(currentDiv).contents().addBack('.foo').css('color','red');
я переименовал "отделение" к "currentDiv" для ясности. Это выбирает элемент тока и все элементы, которые он содержит, затем отфильтровывает тех, которые не имеют класса foo
, и применяет стиль к остатку, т.е. тем, которые действительно имеют класс foo
.
РЕДАКТИРОВАНИЕ А небольшая оптимизация
$(currentDiv).find('.foo').addBack('.foo').css('color','red');
РЕДАКТИРОВАНИЕ
, Этот ответ был обновлен для слияния более новых методов jQuery. Это было первоначально
$(currentDiv).find('.foo').andSelf().filter('.foo').css('color','red');
, который все еще требуется для jQuery, более старого, чем 1,8
Ответ Эндрю был настолько полезным и самым эффективным из всех ответов (начиная с jQuery 1.8 и далее), поэтому я сделал, как предложил Сэм , и превратил его в тривиальный метод расширения jQuery. для каждого использовать:
jQuery.fn.findAndSelf = function (selector){
return this.find(selector).addBack(selector);
};
$(function(){
$('#obj').findAndSelf('.foo').css('color', 'red');
});
Полная заслуга Эндрю за то, что он предложил addBack()
как лучший вариант (на эту дату). Поддерживаю его соответственно и предлагаю всем сделать то же самое.
Запрещая более хорошее решение, я создал новую функцию и использую его вместо $:
var _$ = function(expr, parent){
return $(parent).is(expr) ? $(expr, parent).add(parent) : $(expr, parent);
}
Не делает это делает то, что Вы хотите (если я не неправильно понимаю...)
$(document).ready(function(){
$("div.foo").css("color", "red");
});
$('div.foo, div.foo > *').css('color','red');
основная идея состоит в том, что можно разделить различные правила соответствовать на запятыми. Точно так же, как в css. Насколько я знаю, что все здесь является supoprted jQuery и может быть "ORed" разделением запятой.