Помощь с вызовом внутреннего метода плагина jQuery [закрыто]
-
05-07-2019 - |
Вопрос
Я написал плагин для выделения терминов, используемых для поиска страницы.Источник так же доступно.
Моя проблема в том, что если вы посмотрите на встроенный JavaScript первой ссылки, я создал специальную функцию textPlacement для обработки вставки панели отображения (она немного похожа на функцию Stack Overflow).
Как видите, у меня есть обработчик событий для вставленной кнопки.Я запрограммировал удаление панели, но мне также хотелось бы убрать выделение терминов.В плагине есть метод для этого, называемый toggleTermHighlighting()
.
Как я могу вызвать этот метод изнутри анонимной функции на странице примера?Нужно ли мне это сделать? this.toggleTermHighlighting = function() {}
.Я попытался передать экземпляр этого в первый аргумент, но не смог заставить его работать.
Извините, у меня всегда были трудности с областью видимости в JavaScript.
Кто-нибудь знает, что я могу сделать, чтобы получить доступ к этому методу изнутри анонимной функции со страницы примера?
Решение
Я думаю, если бы вы изменили способ определения функции внутри плагина, это стало бы немного проще.
Измените строку 128 с:
var toggleTermHighlighting = function() {
к:
this.toggleTermHighlighting = function() {
Затем вы можете сделать что-то вроде этого, чтобы получить доступ к функции из совершенно другой области:
var myPlug = new $.fn.searchTermsHighlight();
myPlug.toggleTermHighlighting();
Это было бы ответом на ваш вопрос, но я думаю, что более подходящим может быть другой подход.Если вы посмотрите на большую часть кода пользовательского интерфейса jQuery, вы можете передать строку в плагин, и он выполнит за вас функцию.Итак, вы могли бы просто сделать что-то вроде:
$('body').searchTermsHighlight('toggle');
а затем просто проверьте его в верхней части вашей функции или в функции типа init().
if (options === 'toggle'){ toggleTermHighlighting(); return this; }
Другие советы
Вам нужно будет сделать " toggleTermHighlighting " открытая функция jQuery сама по себе, или же представить ее функциональность в качестве опции для вашего существующего метода. Что ж, если вы хотите сделать что-то немного странное, вы можете вставить функцию (и все, что вам нравится) в элемент данных на затронутом объекте (см. Функцию jQuery " data ").