Могу ли я предоставить «контекст» по умолчанию для jQuery?

Фон:

Второй "контекст» аргумент для вызова селектора jQuery (например:jQuery(selector, context)) может быть обеспечено, чтобы дать двигателю селектора начальную точку для спуска.

Это часто полезно, если вам нужно контролировать контент в IFRAME (в том же домене). Вы просто проходитеiframe.contentWindow.document как "контекст» аргумент.

Если какой-либо код JavaScript загружается в IFRAME, который использует jQuery, и являетсяВЫЗВАННЫЕ ИЗ ОБЛАСТИ НАРУЖНОГО ОКНАтогда любая ссылка на$ или жеjQuery в этом коде на самом деле будет экземплярjQuery из внешнего окна.

Проблема возникает, когда этот код JavaScript в IFRAME (скажем, Bootstrap.js) делает что-то вроде$(document) (или делает какой-то другой селектор без "контекст» аргумент). Когда этот код (определенный внутри iframe) вызывается из внешнего окна,document ссылается на элемент HTMLDocument из внешнего окна, что обычно не является желаемым результатом.

Вопрос:

Было бы очень полезно иметь возможность создать копию / оболочку с лексической областью jQuery, которая имеет значение по умолчанию "контекст» аргумент, предоставленный кем бы то ни было.

Пример:

// jQuery already exists out here
var iframe = document.createElement('IFRAME');
iframe.addEventListener('DOMContentLoaded', function(){

    // code in here can already refer to $ for 'outer' jQuery

    // code in here can refer to $local for 'inner' jQuery by virtue of...
    var $local = jQueryWithContext($, iframe.contentWindow.document);

    // code loaded with IFRAME will use $local by virtue of ...
    iframe.contentWindow.jQuery = iframe.contentWindow.$ = $local;

});
iframe.src = '/path/to/iframe/content.html';

Вопрос в том, можно ли написать что-то вродеjQueryWithContext выше?

Зачем?

Иногда вы хотите изолировать сторонние HTML-компоненты, которые (хотя вы доверяете им с точки зрения безопасности) ведут себя неправильно с точки зрения загрязнения CSS / JavaScript.

Bootstrap.js является хорошим примером. Это вызывает$(document) справедливо, и делает другие подобные вызовы селектора без контекста. Если jQuery можно переопределить так, как я описываю, то этоне оптимально написанные библиотеки могут быть легко изолированы.

Кроме того, может быть очень полезно использовать тот же$.data(el, ...) сбор из обоих фреймов, и это довольно сложно без некоторого управления контекстом.

Ответы на вопрос(1)

Ваш ответ на вопрос