JQUERY как установить данные для содержимого html?

#jquery

#jquery

Вопрос:

У меня есть переменная s, которая содержит строку

 '<div>hello world</div>'
  

(Я не могу изменить содержимое s)

Я хотел бы установить данные на s, которые я пробовал:

 $(s).data('value', 50);
$($(s)).data('value', 50);
  

Есть идеи?

 s = '<div>hello world</div>';
s = $(s).data('value', 50); // works now !!!
console.log($(s).data('value'));
  

Комментарии:

1. s — это некоторый результат AJAX!

2. вся проблема связана с созданием нового объекта каждый раз из одной и той же исходной строки. Эта строка не будет изменена

Ответ №1:

Ваш первый пример ( $(s).data('value', 50); ) работает нормально. Вы не увидите его обновления в DOM, поскольку jQuery хранит data атрибуты во внутреннем кэше для повышения производительности. Вы можете убедиться, что это сработало, прочитав значение обратно:

 var $div = $('div');

console.log('before: '   $div.data('value'));
$div.data('value', 50);
console.log('after: '   $div.data('value'));  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>hello world</div>  

Если вы предпочитаете обновлять data-value атрибут в DOM, используйте attr() , например:

 var $div = $('div');
$div.attr('data-value', 50);  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>hello world</div>  

Используйте инспектор DOM, чтобы увидеть эффект от приведенного выше кода.

Комментарии:

1. Мой первый пример НЕ РАБОТАЕТ нормально: $ (s).data(‘value’) ДАЕТ мне НЕОПРЕДЕЛЕННЫЙ!

2. В таком случае, пожалуйста, предоставьте полный пример вашего кода. То немногое, что вы дали, почти бесполезно. Также проверьте консоль на наличие ошибок, поскольку нет никаких причин, по которым вышеуказанное не работает.

Ответ №2:

Единственный способ заставить то, что вы показываете, работать — это сохранить ссылку на исходный объект…затем получите значение из этого объекта

 var $s = $(s).data('value', 500);
console.log($s.data('value'));
  

В настоящее время вы создаете два объекта, используя одну и ту же исходную строку, и между этими объектами нет ссылки

 $(s) == $(s)// false