2010-11-18 2 views

ответ

6

Они совершенно разные операции:

атр (х, «») устанавливает атрибут в пустую строку

removeAttr (х) удаляет свойство на объекте, если это возможно, или удаляет его и сбрасывает его до значения по умолчанию, если оно определено DTD для этого класса объектов.

3

.removeAttr(x); равнозначно .removeAttribute("x");, а .attr(x, '') просто устанавливает .x в пустую строку. См. jQuery removeAttr ref и соответствующие mozilla removeAttribute ref для получения дополнительной информации.

3

Некоторые атрибуты являются булевыми (существуют ли они или не существуют). Например, возьмите атрибут disabled. Если оно существует, то оно истинно, не имеет значения, для чего установлено значение. Поэтому вам нужно будет использовать .removeAttr('disabled'), чтобы снова включить элемент. Однако jQuery немного нормализует его, вы можете использовать .attr('disabled', false); Так что я думаю, что ответ - это семантика.

Edit:

Этот ответ только что получил некоторые upvotes, который предупредил, что я ответил на это несколько лет назад.

Используйте это вместо того, чтобы для свойств -

.prop('disabled', true) // set as disabled 
.prop('disabled', false) // set as enabled 
.prop('disabled') // return boolean (is this disabled?) 

НЕ использовать removeProp («инвалидов»), так как это будет удалить свойство из объекта DOM (который не то, что вы намерены делать).

9

Учитывая, что определение removeAttr из библиотеки jQuery (см. Ниже). Я бы сказал, да.

removeAttr: function(name, fn) { 
     return this.each(function(){ 
      jQuery.attr(this, name, ""); 
      if (this.nodeType === 1) { 
       this.removeAttribute(name); 
      } 
     }); 

Источник: Jquery 1.4.3 uncompressed version

Хотя по своей природе субъективны. Я думаю, что использование removeAttr является более самодокументируемым подходом. Однако я мог видеть, как другие люди думают об обратном.

+3

Они разные, по этому самому коду - для элементов он устанавливает attr в '' * AND * (для элементов) удаляет атрибут из DOM. – 2010-11-18 17:06:05

+0

@pst - Точка взята. Я изменил «Нет» на «да» – JohnFx

+0

Конечно, довольно поздно, но проверьте ответ @ john-strickler. Установка атрибута в пустое оставляет его в теге, поэтому он «присутствует». Это важно для атрибутов, которые используются как флаги, такие как 'disabled' и другие. – rewritten

2

Первое отличие:

.removeAttr('name') // try to remove the attribute 'name' from the DOM 
.attr('name', '') // set the attribute 'name' to empty string 

Второе различие, вероятно, произошло только мне, это .removeAttr() корректно работают в Firefox и IExplorer, но не очень хорошо в Chrome и не работают вообще на сафари.

Смежные вопросы