Как переопределить глобальные функции jQuery для моего плагина? - PullRequest
0 голосов
/ 18 февраля 2011

Я создал плагин, который создает изображение флажка на основе скрытого поля. Я хотел бы переопределить функцию is() ... это возможно? Я в основном использую изображение, чтобы издеваться над флажком.

Html

<input type="hidden" value="1" id="box" />

Создайте плагин для скрытого поля:

$('#box').myCheckbox();

Я бы хотел сделать следующее:

$('#box').is(':checked');

Возможно ли переопределить функцию is() в моем плагине?

Ответы [ 3 ]

3 голосов
/ 18 февраля 2011

Вы можете расширить селекторы jQuery и добавить новые.

http://james.padolsey.com/javascript/extending-jquerys-selector-capabilities/

Например:

$.extend($.expr[':'],{
    inline: function(a) {
        return $(a).css('display') === 'inline';
    }
});

Это позволяет вам делать:

$(':inline'); // Selects ALL inline elements

$('a:inline'); // Selects ALL inline anchors

РЕДАКТИРОВАТЬ:

В вашем случае, чтобы эмулировать флажок, сначала возьмите код из jquery: флажок ... который:

return elem.checked === true;

Тогда

$.extend($.expr[':'],{
    checked: function(a) {
        if(a.isMySpecialCheckbox()) return a.hasAPropertyThatSignifiesChecked;
        else return elem.checked === true;
    }
});

Попробуйте, я не пробовал, но должно работать.

2 голосов
/ 18 февраля 2011

yep :)

           (function() {
              var proxied = jQuery.fn.is;
              jQuery.fn.is= function() {
                //do your things here
                return proxied.apply(this, arguments);//call the default is here
              };
            })();

btw :checked уже поддерживается по умолчанию

, поэтому, если у вас было

$ ('# checkbox'). Is (': флажок'); // вернуть true / false в зависимости от того, отмечен ли флажок или нет, не усложняют ли вы ситуацию, так как позже вы уберете свои волосы, когда забудете, что внесли эти основные изменения:)

1 голос
/ 18 февраля 2011

Почему вы не можете использовать .attr('checked')?

...