JQuery: это = $ (это)

0

Я хотел создать плагин jQuery, который определит, является ли элемент определенного класса ИЛИ родителем определенного класса.


пример

Учитывая следующий HTML:

<div id="root">
     <div id="a" class="myClass">
          <div id="b"></div>
     </div>
</div>

Я ожидал бы следующих результатов:

>$('#a').isOrParent('.myClass');
 true
>$('#b').isOrParent('.myClass');
 true
>$('#root').isOrParent('.myClass');
 false

Решение A (работает)

$.fn.isOrParent = function (selector) {
    this = $(this);
    if (this.is(selector))
        return true;
    if (this.parents(selector).length !== 0)
        return true;
    return false;
}

Решение B (не работает)

$.fn.isOrParent = function (selector) {
    $this = $(this);
    if ($this.is(selector))
        return true;
    if ($this.parents(selector).length !== 0)
        return true;
    return false;
}

Решение C (не работает)

$.fn.isOrParent = function (selector) {
    if (this.is(selector))
        return true;
    if (this.parents(selector).length !== 0)
        return true;
    return false;
}

Вопрос

Решение A работает, однако, бросает в Chrome следующее исключение:

Uncaught ReferenceError: Invalid left-hand side in assignment 

Из-за этой ошибки я попытался решить проблемы B и C безуспешно.

Это вызывает следующие вопросы:

  • Почему решение A работает, если есть исключение?
  • Почему решение B не работает?
  • 4
    this специальное ключевое слово ... вы не можете присвоить ему значение
  • 0
    Я знаю, что это было больше несчастного случая. Тот факт, что это сработало, поражает меня.
Показать ещё 10 комментариев
Теги:
jquery-plugins

1 ответ

1
Лучший ответ

Ханхто отметил, что решение C действительно работает. Оказывается, что исключение помогло получить ожидаемые результаты. Другими словами; 2 неправильных дела сделали право.

как отметил BlackSheep: это лучший способ сделать это:

$.fn.isOrParent = function (selector) {    
  return this.closest(selector).length !== 0;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню