jQuery 1.3 - проблема с установкой значения атрибута - PullRequest
1 голос
/ 15 января 2009

Это мой первый вопрос о стекаповороте, поэтому постарайтесь быть милым. ; -D

Моя проблема в том, что я реорганизую некоторый существующий код javascript и использую для этого jQuery. В нескольких местах я встречал код JavaScript, подобный следующему:

// some js code working with the customAttribute value
javascriptElementObject.customAttribue = void(0);

javascriptElementObject теперь является объектом jQuery, и я пытался использовать следующий код для того же:

// some js code working with the customAttribute value
javascriptElementObject.attr("customAttribute", void(0));

Однако, похоже, это ничего не делает. Однако работает следующий код:

javascriptElementObject.get(0).customAttribute = void(0);

Мне известна функция removeAttr () jQuery, но я до сих пор ее не использовал, потому что не знаю, эквивалентно ли это значению атрибута void (0).

Так что я думаю, это действительно означает, что у меня есть 2 вопроса:

  1. Почему не работает первая версия jQuery?
  2. Are .get (0) .customAttribue = void (0); и .removeAttr ("customAttribute); эквивалент?

Спасибо.

Ответы [ 4 ]

6 голосов
/ 15 января 2009

jQuery любит перегружать свои методы так:

obj.attr( name ) //retrieves the attribute value
obj.attr( name, value ) //sets the attribute

obj.attr( name, void(0) ) == obj.attr( name, null ) == obj.attr( name ) //i.e retrieving the attribute

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

obj.attr( name, '' )

Это также будет применяться к другим методам jQuery.html(), например

2 голосов
/ 09 марта 2009

Единственный способ работы с пользовательскими атрибутами через объекты jQuery:

obj.get(0).myCustomAttr = 'some value';

Это потому, что метод attr () в jQuery не будет работать с пользовательскими атрибутами (кроме случаев, когда он применяется к XML-документу).

Обратите внимание, что ответ meouw относительно функций перегрузки jQuery не совсем точен, потому что jQuery проверяет параметры, переданные ему таким образом, что:

jQuery.funcname(param)

и

jQuery.funcname(param, null)

отличается, потому что null !== undefined. Например:

var params_test = function(a) {
    if (a === undefined) {
        return 'called with no parameters';
    } else {
        return 'called with one parameter: ' + a;
    }
};
params_test(); // results in 'called with no parameters'
params_test(null); // results in 'called with one parameter: null'
2 голосов
/ 15 января 2009

Чего вы пытаетесь достичь?

Если цель состоит в том, чтобы удалить значение в паре имя / значение, вы также можете просто полностью удалить атрибут. Я не знаю никакой внутренней ценности в поддержании атрибута, который не имеет значения; в менее совместимых со стандартами браузерах это может даже вызвать проблемы.

Как правило, синтаксис $ (селектор) .attr (имя, значение) и $ (селектор) .removeAttr (имя) работает очень хорошо (по крайней мере, я никогда не видел его сбой.)

Если вы пытаетесь использовать void (0), чтобы предотвратить запуск HREF, вам лучше использовать «return false» в качестве события нажатия на эти теги A.

0 голосов
/ 15 января 2009

Хм, попробуйте это:

javascriptElementObject.attr("customAttribute", void(0));
var _void = javascriptElementObject.attr("customAttribute");
alert(_void);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...