removeData() метод jQuery не работает
Я думаю, что я использую removeData правильно, но он, похоже, не работает, вот что я вижу в консоли разработчика, может ли кто-нибудь объяснить, что я делаю неправильно?
Я выводю текущее значение атрибута данных, вызывая removeData, затем снова выводя значение и его все еще там.
$('.questionList > li').eq(1).data('fieldlength')
3
$('.questionList > li').eq(1).removeData('fieldlength');
[
<li class="questionBox" data-createproblem="false" data-fieldlength="3" data-picklistvalues data-required="true" data-sfid="a04d000000ZBaM3AAL" data-type="Text">
<div class="questionLabel">Birthdate</div>
</li>
]
$('.questionList > li').eq(1).data('fieldlength')
3
5 ответов
это потому, что ваш data
происходит из HTML . Согласно документы:
при использовании .removeData ("имя"), jQuery попытается найти данные- атрибут элемента, если в элементе нет свойства с таким именем внутренний кэш данных. Чтобы избежать повторного запроса атрибута data, установите имя значения null или undefined (например .данные("имя", undefined)) вместо использования .removeData().
так вместо
$('.questionList > li').eq(1).removeData('fieldlength');
вы должны сделать
$('.questionList > li').eq(1).data('fieldlength',null);
есть немного gotcha, который я хотел уточнить, если кто-то еще наткнется на него...
если у вас есть HTML5 data-*
атрибуты элемента, который вам нужно использовать jQuery removeAttr()
вместо removeData()
Если вы хотите удалить их из элемента в DOM.
например, чтобы удалить атрибут данных из элемента, необходимо использовать:
$({selector}).removeAttr('data-fieldlength');
вы можете читать значения с $({selector}).data('fieldlength')
но removeData()
фактически не удаляет их, если они являются атрибутами HTML для элемента, присутствующего в источнике страницы (он просто удаляет его в памяти, так что если вы снова запросите его с помощью jQuery it появляется для удаления).
лично я думаю, что это поведение нарушено, и я уверен, что ловит много людей.
в скрытом поле, используя пользовательский атрибут данных для хранения данных объекта Должны использовать. removeAttr() вместо .removeData () с помощью ID
на самом деле это работает лучше для меня. Потому что он оставляет атрибут нетронутым в элементе, но без присвоенного ему значения.
$(selector).attr("data-fieldlength","");
.removeData()
будет только удалить данные из внутреннего jQuery .data()
кэш нужно data-
атрибуты элемента не будут удалены. Последний вызов data()
поэтому повторно извлекает значение из элемента . Чтобы предотвратить это, используйте .removeAttr()
вместе с .removeData()
удалить data-
атрибут, а также.
пример:
$('div').removeData('info');
$('div').removeAttr('data-info');
затем установите либо:
$('div').data('info', 222);
$('div').attr('data-info', 222);