изменение атрибута данных не работает

Я пытаюсь изменить атрибут данных, но он никогда не меняется и остается как "ТЕКСТ", который является значением по умолчанию.

function SuccessGetActorsForGroupCallback(data, el) {
    var str = "";
    jQuery.each(data, function (i, val) {
        str += val + '<br />';
    });

    $(el).data('original-title', str);
    Utilities.ApplyTooltips($(el));
}

Пожалуйста помоги

Ответы

Ответ 1

Метод .data не изменяет data- HTML data-; он изменяет переменную, которая хранится внутри jQuery.

Если вам действительно нужно/нужно изменить data-, сделайте это явно с помощью .attr():

$(el).attr('data-original-title', str); 

Однако это не изменит значение, возвращаемое .data. jQuery будет извлекать это значение из data- HTML data- только в том случае, если он не может найти значение, сохраненное внутри. Если после изменения атрибута HTML вы снова получите $(el).data('original-title'), вы увидите, что он не изменился.

Если это проблема, используйте метод .removeData() чтобы удалить внутренне сохраненное значение. В следующий раз, когда вы используете .data(), jQuery увидит, что он отсутствует и извлекает data- HTML data-.

Взгляните: http://jsfiddle.net/mblase75/LHCUK/


HTML:

<p id="p" data-title="blah"></p>

JQuery:

console.log($('#p').data('title')); // returns "blah"

// alter the attribute directly
$('#p').attr('data-title','whooo'); // data-title="whooo"
// test if .data is changed
console.log($('#p').data('title')); // still returns "blah"

// delete the .data() value
$('#p').removeData('title');
// now fetch it again -- it will retrieve the new data- attribute
console.log($('#p').data('title')); // returns "whooo"

Теперь, на практике, вам не стоит беспокоиться об этом. Просто помните, что data- представляет начальное значение переменной .data() и необязательно текущее значение этой переменной, и все будет в порядке.

В итоге: Метод .data() извлекает значение из элемента HTML один раз, когда документ загружается, и не будет делать этого снова, пока переменная хранится внутри.

Ответ 2

Ваш код: $(el).data('original-title', str);
должен быть: $(el).attr('data-original-title', str);

.attr(); используется для изменения атрибутов, если они используются в парах ключ-значение.

Документация здесь