2015-04-19 148 views
4

我有一系列通过Javascript嵌入各种页面的应用程序,因此重要的是尽可能谨慎地构建选择器,无意中在父页面上选择了一些内容。 (我有超过父标记没有控制,和iframe中是不是一种选择。)将jQuery选择器限制到某个元素的子元素

所有.noConflict()模式使用jQuery父页面,和我的应用程序一直过着div内带班my_app_class

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

}(window.jQuery)); 

尽管我总是记得在“my_app_class”前加上我的jQ选择器,但如果在$中隐含这个选项,我会感觉更舒服。从本质上讲,我想:

$(".headline") 

要始终等于:

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

用简单的方式来做到这一点会是这样的:

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

但我想保持一个超功能的情况下,我确实需要在父页面上进行选择(这种情况不时发生)。我也不想覆盖像$.ajax这样的jQuery的其他用途。

什么是最好的是别名功能和保持原来的?我想要这样的东西

(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

更好的解决方案。谢谢! –