Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 元素[属性]的可行性:类型(n)选择器的第n个_Jquery_Css_Jquery Selectors_Css Selectors - Fatal编程技术网

Jquery 元素[属性]的可行性:类型(n)选择器的第n个

Jquery 元素[属性]的可行性:类型(n)选择器的第n个,jquery,css,jquery-selectors,css-selectors,Jquery,Css,Jquery Selectors,Css Selectors,这个问题与选择器的工作方式有关,不是我的问题。我使用的HTML与此类似: <div class="example"> <textarea>...</textarea> <textarea for="1">foo</textarea> <textarea for="2">bar</textarea> <textarea for="3">hello</textarea

这个问题与选择器的工作方式有关,不是我的问题。我使用的HTML与此类似:

<div class="example">
    <textarea>...</textarea>
    <textarea for="1">foo</textarea>
    <textarea for="2">bar</textarea>
    <textarea for="3">hello</textarea>
    <textarea for="4">world</textarea>
</div>

...
福
酒吧
你好
世界
我试图使用
$('.example').children('textarea[for]:类型(1)的第n个)
来选择具有
for
属性的第一个textarea。我一直没有定义。我重读了一遍,注意到那句话说

选择与具有相同元素名称的同级相关的父级第n个子级的所有元素

而且有意义的是,
textarea[for]:第n个类型(1)
将返回undefined,因为第一个textarea没有
for
属性


那么我的问题是,将来类型为(n)选择器的
元素[attribute]:第n个是否可能返回具有指定属性的第n个元素?由于jQuery/CSS的工作方式,这需要一个全新的选择器吗?

第n个类型使用实际DOM中的索引,而不是筛选列表中的索引,因此第n个类型(1)
将找到第一个文本区域
,但您通过
[for]
对其进行筛选<代码>第n个类型(2)是
foo

第n种类型(3)
bar

所以答案是否定的,您不能为此使用类型的第n个

要获取带有“For”的第一个textarea子级,可以使用document.querySelector

var first = document.querySelector('.example > textarea[for]');
var first = document.querySelectorAll('.example > textarea[for]')[0];
//or jQuery
var first = $('.example > textarea[for]:eq(0)');
顺便说一句,类型的第n个索引从1开始,而不是从0开始

那么我的问题是,将来类型为(n)选择器的
元素[attribute]:第n个是否可能返回具有指定属性的第n个元素

不完全是这样,因为
:nth-of-type()
中的“type”有一个非常具体的含义,并且因为简单的选择器根据DOM或类似文档中反映的元素自身特征以外的任何其他标准来匹配元素不是很直观

由于jQuery/CSS的工作方式,这需要一个全新的选择器吗

是的,这就是为什么选择器4引入了
:nth-match()
,它后来成为现有
:nth-child()
的扩展,根据选择器参数,它只考虑元素的子集。看看我对你的回答。在你的情况下是这样的

$('.example').children(':nth-child(1 of textarea[for])')
这仍然没有在任何地方实施;希望在新的一年里,情况会有所改变


由于这是jQuery,您可以使用
:eq(0)
,但除非您只有一个这样的
.example
和一个这样的文本区域,否则您可能需要使用
.each()
迭代
.example
元素(感谢这些非标准的选择器)。

从我的观点来看,这不是一个限制,它的实现对于模式来说已经足够好了。但是对于您的情况(选择单个节点),我们也根本不需要它。

在您的例子中,您不需要使用第n种类型的(n),因为您选择的是单个节点,而不是具有某种模式(奇数、偶数、2n+1)的集合

对于您的情况,您可以尝试下面的一个

 $('.example textarea[for]').first()
如果您有一个场景来选择类型为(n)的第n个节点集。是的,它可以在没有任何问题的情况下工作

$('.example textarea[for]:nth-of-type(2n)')  This selector is working well enough.
请参见演示>运行代码片段

$(文档).ready(函数(){
setTimeout(函数(){
$('.example textarea[for]:第n个类型(2n')).css('background-color','red');
}, 1000);
});

...
福
酒吧
你好
世界

“将来
元素[属性]:第n个类型(n)
选择器是否可能返回具有指定属性的第n个元素”-否,因为正如您已经指出的,这不是
:第n个类型()
的工作方式。它基于元素的标记类型。您可能已经知道这一点,但是对于记录,您可以使用
:eq()
选择器或
.eq()
方法根据其索引根据匹配元素集获取元素。在您的例子中,
$('.example').children('textarea[for]:eq(0)
-使用了
0
索引,因为
eq
是零基的,
:n类型
不是,@JoshCrozier我实际上使用了
:eq()
选择器。因此,我想需要一个全新的选择器来与属性选择器一起进行第n次类型选择?这太棒了,谢谢!整个
:n个孩子(textarea[for])
在我看来有点难看,但我想我必须处理它。希望浏览器支持很快就会出现。@mcon:我同意。它唯一的优势在于它的实际功能更加明显。