Не работает $ (this) .removeAttr ('123'). Attr ('456', ''); - PullRequest
0 голосов
/ 15 марта 2019

Кто-нибудь может решить это? О: attr (123, '');

Например, attr: 123 = "" to 456 = ""

Работает:

/* Works */ 
$('product[123s0s0]').removeAttr('123s0s0').attr('abc123','');
$('product[abc123]').css({'background-color':'#cfc'});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p><product 123s0s0 style="background-color: #ccc">123s0s0 to abc123: Works</product></p>
<p><product 456s0s0 style="background-color: #ccc">456s0s0 to 456s0s1: Not</product></p>

Не

$('product[456s0s0]').removeAttr('456s0s0').attr('456s0s1','');
$('product[456s0s1]').css({'background-color':'#cfc'}); 

Ответы [ 3 ]

1 голос
/ 15 марта 2019

Это потому, что эти атрибуты и сам тег <product /> нестандартны. Тот факт, что любой из них работает вообще, в значительной степени удача.

Я бы предложил использовать стандартные теги HTML, если вы действительно не хотите писать свой собственный тип документа, а также атрибуты data для хранения пользовательских метаданных. Попробуйте это:

$('span[data-123s0s0]').removeAttr('data-123s0s0').attr('data-abc123','');
$('span[data-abc123]').addClass('foo');

$('span[data-456s0s0]').removeAttr('data-456s0s0').attr('data-456s0s1','');
$('span[data-456s0s1]').addClass('foo');
span { background-color: #CCC; }
.foo { background-color: #CFC; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p><span data-123s0s0>123s0s0 to abc123: Works</span></p>
<p><span data-456s0s0>456s0s0 to 456s0s1: Works</span></p>
0 голосов
/ 15 марта 2019

Кажется, что attr не может начинать ширину числа.

Синтаксический анализатор HTML (по крайней мере, в Chrome) выглядит довольно снисходительно и будет принимать недопустимые имена атрибутов. Но затем попытка добавить новый недопустимый атрибут через скрипт вызовет эту ошибку (снова в Chrome) Не удалось выполнить 'setAttribute' для 'Элемента': '456s0s1' не является допустимым именем атрибута. - Питер Б

0 голосов
/ 15 марта 2019

Я нашел проблему. Имя атрибута не может начинаться с цифр. Поэтому первый символ атрибута должен быть строкой или подчеркиванием.

$('product[456s0s0]').removeAttr('456s0s0').attr('f456s0s1','');
$('product[456s0s1]').css({'background-color':'#cfc'}); 
...