如何开发Jquery插件来查找与选择器匹配的第一个子项?
我尝试制作一个jQuery插件(<代码> FixFixStand()>代码>,以找到具有给定特性的第一个孩子(在代码< >查找)(<代码)>和<代码>子()/<代码>函数中间。例如,给定这个标记:如何开发Jquery插件来查找与选择器匹配的第一个子项?,jquery,jquery-plugins,Jquery,Jquery Plugins,我尝试制作一个jQuery插件( FixFixStand()>代码>,以找到具有给定特性的第一个孩子(在代码< >查找)(和子()/函数中间。例如,给定这个标记: <div id="start"> <div> <span>Hello world</span> <ul class="valid-result"> ... </ul> <ul class="valid-
<div id="start">
<div>
<span>Hello world</span>
<ul class="valid-result"> ... </ul>
<ul class="valid-result">
<li>
<ul class="not-a-result"> ... </ul>
</li>
</ul>
<div>
<ul class="valid-result"> ... </ul>
</div>
</div>
</div>
它的工作原理是它试图返回预期的结果,但它返回结果的格式对我来说非常罕见。我想问题在于我不了解Jquery。这里是我测试的地方
编辑
$(“#start”).findFirst('ul')
之后的预期结果是一个集合,包含所有具有类“有效结果”的ul,但不可能使用该类,因为它在实际案例中不存在(只是试图解释结果)
这并不等同于first(),因为first只返回一个元素!您不需要构建插件。使用jQuery内置,并且按照Mark的建议,您也可以使用first选择器 这是在你的情况下的用法
$("#start").find("ul").first().css("background", "red");
//For Short $("#start ul").first()
要使用类过滤器,请使用属性选择器
$("#start").find("ul[class=valid-result]").first().css("background", "red");
//For Short $("#start ul[class=valid-result]").first()
更新 如果只想突出显示类为
有效结果的外部ul,则根本不需要first()
$("#start ul[class=valid-result]").css("background", "red");
但是,由于在我的示例中,内部ul也将共享背景,因此您可能必须为内部ul
设置不同的背景
更新2
如果要选择
的第一级,则
$("#start div").chilrent("ul"); //this will return the first level of ul inside the div
您不需要构建插件。使用内置jQuery,正如Mark所建议的,您也可以使用第一个选择器
这是在你的情况下的用法
$("#start").find("ul").first().css("background", "red");
//For Short $("#start ul").first()
要使用类过滤器,请使用属性选择器
$("#start").find("ul[class=valid-result]").first().css("background", "red");
//For Short $("#start ul[class=valid-result]").first()
更新
如果只想突出显示类为有效结果的外部ul,则根本不需要first()
$("#start ul[class=valid-result]").css("background", "red");
但是,由于在我的示例中,内部ul也将共享背景,因此您可能必须为内部ul
设置不同的背景
更新2
如果要选择
的第一级,则
$("#start div").chilrent("ul"); //this will return the first level of ul inside the div
你可以这样做:
var selector='ul';
var $results= $('#start '+selector).not( selector +' '+selector);
not()
方法将排除与选择器匹配但也是同一选择器的后代的元素您可以执行以下操作:
$("#start").find("ul[class=valid-result]").first().css("background", "red");
//For Short $("#start ul[class=valid-result]").first()
var selector='ul';
var $results= $('#start '+selector).not( selector +' '+selector);
not()
方法将排除与选择器匹配但也是同一选择器的后代的元素,这些选择器都为您的示例提供了结果:
$("#start").find("ul[class=valid-result]").first().css("background", "red");
//For Short $("#start ul[class=valid-result]").first()
$('#start>div>span').siblings('ul')
$('#start').find('div').find('span').siblings('ul')
$('#start>div>span').siblings('ul')
$(“#开始>*>ul”)
$('#start').children().find('>ul'))
$('#start')。子项('div')。查找('span')。兄弟项('ul'))
编辑:另一个示例:
$('#start>div>span').siblings('ul')
$('#start').find('div').find('span').siblings('ul')
$('#start>div>span').siblings('ul')
呜呜,划破所有这些,我错过了分区的最后一个内部UL
所以:这个(我测试了一下)确实让那些孩子得到了div的ul,但没有在li里面
$('#start div').find('>ul')
$('#start div>ul')
这意味着找到一个UL,它是一个DIV的直接分集选择器,所有选择器都为您的示例提供结果:
$('#start>div>span').siblings('ul')
$('#start').find('div').find('span').siblings('ul')
$('#start>div>span').siblings('ul')
$(“#开始>*>ul”)
$('#start').children().find('>ul'))
$('#start')。子项('div')。查找('span')。兄弟项('ul'))
编辑:另一个示例:
$('#start>div>span').siblings('ul')
$('#start').find('div').find('span').siblings('ul')
$('#start>div>span').siblings('ul')
呜呜,划破所有这些,我错过了分区的最后一个内部UL
所以:这个(我测试了一下)确实让那些孩子得到了div的ul,但没有在li里面
$('#start div').find('>ul')
$('#start div>ul')
这里说的是找到一个UL,它是DIV或
$('selector:first')
的直接分词,它给出了类似的结果,但您的语法通常更快、更容易理解。据我所知,first()返回集合中的第一个元素。选择器无法对其进行筛选,它只返回一个匹配项。我需要与给定选择器匹配的所有外部元素。@Ivan,是的,第一个元素中缺少该元素。我试图让它更容易理解。不要相信“有效结果”!!!只有在示例中才能更容易地解释它:)演示仅更改第一个列表项的背景。我们的想法是,所有外部ul都应该是highlightedor$('selector:first')
,这会给出类似的结果,但您的语法通常更快、更容易理解。据我所知,first()返回集合中的第一个元素。选择器无法筛选它,它只返回一个匹配项。我需要所有与给定选择器匹配的外部元素。@Ivan,是的,它在第一个选择器中丢失了。我试图让它更容易理解不要相信“有效的结果”!!!只有在示例中才能更容易地解释它!:)演示仅更改第一个列表项的背景。这个想法是,所有外部ULs都应该是高亮度的。如果你将此作为如何学习编写插件的练习,这没关系,但你应该特别注意,否则,你真的是在复制现有的功能。我相信,我已经解释得很糟糕了。。编辑…我在其中添加了一些示例作为答案-探索这些示例以了解选择器选项。如果您将此作为如何学习编写插件的练习,那没关系,但您应该特别注意,否则,您实际上是在复制现有功能。我相信,我已经解释得非常糟糕。。编辑…我在其中添加了一些示例作为答案-探索这些示例以了解选择器选项。