我有一个html文档,如下所示:
<div id="panel_comments">
<table id="panel_comments_table">
<tr>
<td style="width: 150px;">Monday: </td>
<td><textarea id="panel_comments_monday" rows="4" cols="60" >Monday comment area</textarea></td>
</tr>
.. same with the other 6 weekdays
</table>
</div>
现在,如果我想选择所有的文本区域,我将执行以下操作,这是一种自然语言:give me all elements which are textareas, with the following ids
$("textarea [id^=panel_comments_]")
但它给了我一个空洞的结果。相反,我必须像这样重新排列选择器,这是在自然语言give me all elements with the ids, and which are textareas
中
$("[id^=panel_comments_] textarea")
为什么选择器的排序很重要?
发布于 2013-05-29 09:46:24
这里的空间很重要,就是后代选择器。只需略去:
textarea[id^=panel_comments_]
div
似乎起作用的原因是,它选择ID为panel_comments
的[id^=panel_comments_] textarea
元素,然后查找其后代的所有文本区域。因此,这只是“偶然”的,因为div
和textarea
有类似的ID。如果您给div
元素一个完全不同的ID,它就不会工作。
CSS选择器工作在层次结构上,比如HTML,所以“子选择器”的顺序很重要,这是合理的。
只有当您不想表达元素之间的关系时,命令几乎不重要
一个简单的选择器要么是类型选择器,要么是通用选择器,然后依次是零或多个属性选择器、ID选择器或伪类。
发布于 2013-05-29 09:46:04
你想要这个,没有额外空间:
$("textarea[id^=panel_comments_]")
使用空格as:$("textarea [id^=panel_comments_]")
意味着选择textarea中具有ID的所有元素。
使用:$("[id^=panel_comments_] textarea")
意味着选择ID以选择器字符串开头的元素中的所有textarea。
在BoltClock的注释之后,必须在任何额外的筛选器之前使用类型选择器,这意味着:
$("textarea[id^=panel_comments_]")
有效$("[id^=panel_comments_]textarea")
无效发布于 2013-05-29 09:46:30
$("textarea[id^=panel_comments_]")
去掉多余的空间
https://stackoverflow.com/questions/16810584
复制相似问题