2012-04-27 2 views
8

Я хотел бы проверить, было ли применено значение данных jQuery для объекта. Например, код в другом месте может присвоить данные объекта:Правильный способ проверить конкретное значение .data() в объекте jQuery?

$myObject.data('hello','world'); 

В другом месте, я хочу, чтобы проверить, если значение придавалось свойство данных привета.

Каков правильный способ справиться с этим? .hasData казался очевидным выбором, но, похоже, не работает, как «hasClass», поскольку вы не можете передать ему определенное имя элемента данных.

ответ

15

Чтобы получить свойство (например, для сравнения), использовать .data с одним аргументом:

$myObject.data('hello') 

Он возвращает значение undefined, когда данные не существует.

+2

Итак, вы бы использовали что-то вроде 'if (typeof $ myObject.data ('hello') ===" undefined "))'? Это должно работать, но кажется «un-jQuery-ish»;) –

+0

@DA. Для вашего запроса нет метода «jQuery-ish». Вы можете написать плагин, если хотите. Все, что вам нужно, это эта информация: 1. После присвоения значения с помощью '.data()', элемент ** DOM ** получает свойство, имя которого равно '$ .expando'. 2. Это свойство, например «jQuery1710979685063056744», содержит идентификатор. 3. Этот идентификатор, например. «29» соответствует ключу в «$ .cache», например. '$ .cache [29]'. Данные хранятся в '$ .cache [29] .data'. –

8

Проверьте, существуют ли данные и установите их, если нет.

if ($myObject.data('hello') === undefined) { 
    // data NOT set 
    $myObject.data('hello','world'); 
} else { 
    // data IS set 
} 
+1

у вас, похоже, есть скобки в неправильных местах? –

-1

Вы также можете попробовать:

$myObject.hasData("hello") 

Она возвращает истину, если есть данные, и ложь, если нет ничего. Ссылка на сайт jQuery: http://api.jquery.com/jquery.hasdata/

+0

Это самый правильный способ сделать эту проверку на сайте jQuery. «Основное преимущество jQuery.hasData (element) заключается в том, что он не создает и не связывает объект данных с элементом, если в настоящее время он не существует. Напротив, jQuery.data (element) всегда возвращает объект данных вызывающему, создавая один если ранее объект данных не существовал ». –

+6

@JamesWilson, это совершенно неправильно. Это просто проверяет, есть ли вообще данные, и это не свойство объекта jQuery, а скорее jQuery. – Dykam

+1

Не работает. Я получаю TypeError: $ (...). HasData не является функцией. – sohtimsso1970

Смежные вопросы