4

У меня есть ряд приложений, которые встроены через Javascript на разных страницах, поэтому важно быть максимально осторожными в отношении создания селекторов таким образом, чтобы не было случайно выберите что-либо на родительской странице. (Я не имею никакого контроля над родительской разметкой, и плавающие фреймы не вариант.)Ограничить селекторы jQuery для детей определенного элемента

Родительских страницами все используют JQuery в режиме .noConflict(), и мое приложение всегда живет внутри div с классом my_app_class

(function($) { 
    var el = $(".my_app_class"); //my code 

}(window.jQuery)); 

Хотя я очень хорошо отношусь к тому, чтобы всегда вспоминать о том, чтобы добавить мои селекторы jQ с помощью «my_app_class», мне было бы более комфортно, если бы это было неявно в $. По сути, я хотел бы:

$(".headline") 

Чтобы всегда равна:

$(el).find(".headline") 

Наивный способ сделать это было бы так:

$ = function(selector) { 
    return jQuery(el).find(selector); 
} 

Но я хотел бы сохранить супер для ситуаций, когда мне действительно нужно сделать выбор на родительской странице (что время от времени происходит). Я также не хочу перезаписывать другие виды использования jQuery, например $.ajax.

Какое лучшее было для функции функции и сохранения оригинала? Я хочу что-то вроде этого

(new $) = selection inside `.my_app_class` 

($$) = (old $) 

Спасибо!

+0

Посмотрите здесь; более или менее похожий вопрос: http://stackoverflow.com/questions/3690447/override-default-jquery-selector-context –

ответ

0

То, что вы пытаетесь, является головной болью обслуживания. Если кто-то еще заберет ваш код, они будут очень смущены, пытаясь мысленно преобразовать синтаксис jQuery в то, что вы хотите.

Если вы вместо этого напишите свой код как простые плагины jQuery, применяемые к соответствующим классам. Тогда:

1) вы увидите, что они, естественно, применяются только соответствующие элементы, без взлома сам JQuery и

2) вы вдруг рамки для их применения динамически загруженного содержимого (опять-таки на основе классов, но на этот раз в загруженном контенте).

Существует много моделей для написания кода в виде плагинов. Простым является jQueryUI $.widget

+0

МНОГОЕ лучшее решение. Спасибо! –

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