Получение булевых данных из атрибута 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/
Ответы
Ответ 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"));