JQuery, установить атрибут для тега ‹a›

Я использую $(expr).attr("hash",value) для установки атрибута "hash" для элемента привязки HTML "a", но Jquery этого не сделает. но если я изменю expr на «div», то я могу установить атрибут «hash» на тег «div».

является ли это поведение спецификацией xhtml? я могу установить «id» атрибута тега «a». поскольку id является встроенным атрибутом для тега html «a».


person Community    schedule 11.02.2009    source источник
comment
Это может помочь, если вы опубликуете фактический HTML и jQuery, которые вы используете.   -  person Matt Howell    schedule 11.02.2009


Ответы (3)


установить атрибут «хэш» для элемента привязки HTML «a»

Элемент ‹a> (HTMLLinkElement) уже имеет свойство DOM Level 0 hash. Он используется как window.location.hash для чтения или установки части «...#anchor» в конце URL-адреса, на который ссылается элемент href.

Установка a.hash, будь то напрямую или через оболочку jQuery attr(), просто устанавливает имя привязки в URL-адресе ссылки. Вы могли намеренно сказать, что вам нужен фактический атрибут, вызвав метод DOM a.setAttribute('hash', value), за исключением того, что это не работает в IE6/7 из-за давней ошибки, из-за которой атрибуты и свойства смешиваются.

Это одна из проблем с добавлением пользовательских нестандартных атрибутов к элементам, вы никогда не знаете, когда они будут конфликтовать с существующим именем. HTML5 предложит вам ограничить ваши пользовательские атрибуты именами, начинающимися с «data-», но в целом лучше найти другой способ хранения данных, если вы можете.

person bobince    schedule 11.02.2009

Вероятно, ваша проблема в том, что для тега <a> нет атрибута hash. Возможно, вы ищете атрибут name или хотите изменить хэш в ссылке href, и в этом случае вам придется разобрать текст ссылки и заменить хэш с помощью регулярных выражений.

person Sophie Alpert    schedule 11.02.2009

Еще один вариант установки хэша. это работает только там, где выражение возвращает элемент a. Это связано с тем, что хэш является свойством фактического элемента dom.

$(expr).each(function() {
  this.hash = value;
});

если вам нужно проверить, является ли это тегом, используйте этот

$(expr).is('a').each(function() {
  this.hash = value;
});

в случае, когда вы действительно хотите добавить какой-либо настраиваемый атрибут, я бы рекомендовал добавить значение, используя метод данных

$(expr).data('myHash', value);
person bendewey    schedule 11.02.2009