Подтвердить что ты не робот

Иметь jQuery игнорировать регистр в именах атрибутов/данных?

Мы используем атрибуты HTML5 data-* для некоторых наших взаимодействий на стороне клиента. jQuery использует их для выполнения своей задачи.

Уловка заключается в том, что входящий HTML может меняться. Очевидно, это проблема, которая должна быть исправлена, но я не всегда могу контролировать создаваемый HTML, к сожалению.

Вопрос:

Учитывая эти два тега:

<a data-sampleAttributeName="example">

<a data-sampleattributename="example">

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

Самое лучшее, что я придумал, это примерно так:

var theAttribute = ($myobject).data('sampleAttributeName');

if (($myobject).data('sampleAttributeName')){
    theAttribute = ($myobject).data('sampleAttributeName')
} else {
    theAttribute = ($myobject).data('sampleattributename')
}

Я мог бы превратить это в функцию, которую я мог бы просто передать версии camelCase, и проверить и то, и другое. Мне просто интересно, есть ли в jQuery более чистая встроенная функция, чтобы игнорировать случай значения data (или attr).

4b9b3361

Ответ 1

Для обоих приведенных здесь вариантов вы должны получить значение, используя

.data('sampleattributename')

Корпус верблюда (.data('sampleAttributeName')) предназначен, когда атрибут выглядит следующим образом:

<a  data-sample-attribute-name="something">Anchor</a>

Проверьте этот jsfiddle

Ответ 2

Для каждого интересующего вас элемента, итерации по объекту, возвращаемому .data(), и обновлению данных элемента jQuery с помощью ключа toLowerCase().

$('a').each(function ()
{
    var $this = $(this),
        data = $this.data(),
        kTemp;

    for (var k in data)
    {
        kTemp = k.toLowerCase();
        if (k !== kTemp)
        {
            $this.data(kTemp, data[k]).removeData(k);
        }
    }
});

Ответ 3

У меня есть много устаревшего кода, который имеет атрибуты данных в html. Некоторые атрибуты содержат тире, а некоторые - смешанные. Чтобы поддерживать спецификацию w3c для атрибутов данных html5 и изменения в .data, появившиеся в jQuery 1.6, я создал функцию преобразования строк имени атрибута данных в их эквивалент w3c; Это означает, что такие атрибуты, как "data-fooBar", будут преобразованы в "foobar", а "data-foo-barBaz" будет преобразован в "fooBarbaz". Мне нужно было что-то подобное, чтобы добавить к моим $.data() вызывающим, поэтому мне не нужно обновлять существующий html, который может включать обновления баз, и было бы кошмаром найти все атрибуты данных и обновить их до соответствуют спецификации w3c. Эта функция разработана специально для использования в jquery-библиотеке и проверяет версию jquery, заменяя только тире (+ camelcase) для jQuery версии 1.6+ (все атрибуты данных будут преобразованы в нижний регистр, независимо от версии jQuery). Функция может быть легко преобразована в работу без jQuery.

Использование:

var html5data = $(this).data(w3cdatakey('foo-barBaz')); //same as $.data('fooBarbaz');

ознакомьтесь с этой скриптой: Пример jsfiddle