Получение булевых данных из атрибута data в jquery - программирование
Подтвердить что ты не робот

Получение булевых данных из атрибута data в jquery

Я пытаюсь получить атрибут данных типа Boolean из элемента html DIV, однако он всегда возвращает false, когда строка преобразуется в boolean.

HTML

<div id='test' data-return="true"></div>

JS

isreturn_str = $('#test').data('return');
isreturn = (isreturn_str === 'true');
if (isreturn) {
    document.write("It is true");
} else {
    document.write("It is false");
}

Выход

Это неверно

http://jsfiddle.net/neilghosh/494wC/

4b9b3361

Ответ 1

Метод jQuery .data() умеет распознавать логические и числовые значения и преобразует их в свой собственный тип. Итак, $('#test').data('return'); возвращает логическое true, а не "true".

Если вы хотите получить необработанные данные (без автоматического преобразования данных), вы можете использовать .attr():

$('#test').attr("data-return");

См. рабочий тестовый пример: http://jsfiddle.net/jfriend00/6BA8t/

Ответ 2

jQuery распознает строку "true" как ее логическую копию (в контексте атрибутов данных) и таким образом:

typeof isreturn_str; // boolean

но вы строго сравниваете строку 'true', которая дает false, поскольку строка не является логической.

Ответ 3

"true" внутренне ливается в boolean (попробуйте alert (typeof(isreturn_str))), поэтому сравнение === не выполняется при проверке типа.

Вы можете вызвать .toString()

isreturn_str = $('#test').data('return').toString();

http://jsfiddle.net/494wC/8/

Ответ 4

Я использую jquery 2.1.0, и мне нужно использовать eval

// $('#test').attr("data-return");" doesn't works
eval($('#test').attr("data-return"));