如何开发Jquery插件来查找与选择器匹配的第一个子项?

如何开发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-

我尝试制作一个jQuery插件(<代码> FixFixStand()>代码>,以找到具有给定特性的第一个孩子(在代码< >查找)(<代码)>和<代码>子()/<代码>函数中间。例如,给定这个标记:

<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都应该是高亮度的。如果你将此作为如何学习编写插件的练习,这没关系,但你应该特别注意,否则,你真的是在复制现有的功能。我相信,我已经解释得很糟糕了。。编辑…我在其中添加了一些示例作为答案-探索这些示例以了解选择器选项。如果您将此作为如何学习编写插件的练习,那没关系,但您应该特别注意,否则,您实际上是在复制现有功能。我相信,我已经解释得非常糟糕。。编辑…我在其中添加了一些示例作为答案-探索这些示例以了解选择器选项。