我有以下HTML代码:
<html>
<head>
</head>
<body>
<div id="never-selected">
</div>
</body>
</html>
在JQuery 1.3.2中,我想围绕$()创建包装器,它允许您选择具有任何组合的任何元素,但div #never-selected或其内容除外。
我试着这样做:
_context = false;
getContext = function() {
if (_context === false) {
_gui_dom = jQuery("fuzzy magic selector");
}
return _gui_dom;
};
// return a jQuery object filtered to aim the content of the tartiflet GUI only
select = function(selector) {
return jQuery(selector, getContext());
};
但我找不到合适的公式来投射“模糊魔法选择器”;-)
我最好的镜头是jQuery("head *, body *:not(#never-selected, #never-selected *)")
,但它的缺点是你不能选择头部和身体,这非常烦人。使用html *做工作。
发布于 2009-05-11 08:26:20
我不确定我是否理解了这个问题,但是尝试对结果集使用.not()
select = function(selector){return $(selector).not('#never-selected, #never-selected *')};
发布于 2009-05-11 11:25:15
您可以编写自己的自定义选择器来解析出您想要的内容,使用任何数量的jQuery来获取这些元素。有时他们默认提供的选择器并不能做所有的事情。
我不知道如何实现你想要的东西,但你可以这样做:
jQuery.extend(jQuery.expr[':'],{
everything_but: function(el,sel) {
var everything = jQuery(el).clone();
everything.find(sel).remove();
return everything;
}
});
我肯定不能说我的实现会工作,但它可能会让你知道如何实现你自己的选择器来实现你想要的东西。
它可以像平常一样使用。如下所示:
var select = $('*:everything_but(#never-selected)')
不管怎样,编写你自己的选择器似乎就是你试图用你的脚本做的事情。祝好运!
发布于 2009-05-11 11:59:07
也许创建一个函数,用它传递的参数调用jQuery(),然后自动执行.filter(),这样可能行得通吗?
function select() {
var jquery = jQuery.apply(args);
return jquery.filter(":not(#never-selected, #never-selected *");
}
不确定这是否有效-它是在空气中编码的。
https://stackoverflow.com/questions/848829
复制