如何在此示例中进行多项选择?

时间:2010-04-22 08:28:30

标签: javascript jquery jquery-selectors

HTML的相关摘要:

<span class="a">
<div class="fieldname">Question 1</div>
<input type="text" value="" name="q1" />
</span>

相关的jQuery:

$.each($('.a'), function(){
$thisField = $('.fieldname', $(this));
});

究竟是什么设置为$thisField?如果我对jQuery中的多个选择器的理解是正确的,那么应该抓住外部<span>元素和内部<div>元素。但由于某些原因,如果我使用$thisField.prepend("hi");,最终会将hi放在文本Question 1之前,而不是<div>之前。我认为多个选择器会抓取这两个元素,prepend()hi添加到两个元素的开头,而不仅仅是<div>

7 个答案:

答案 0 :(得分:2)

您正在使用的调用约定不是“多选择器”,它实际上是在上下文($(this))内搜索选择器('.fieldname')。 See docs

您可以执行此操作以获取<div><span>

$(this).find('.fieldname').andSelf().prepend('hi');

答案 1 :(得分:1)

$('.fieldname', $(this));相当于$(this).find('.fieldname');

不要与以下内容混淆:$('.class1, class2');

$('.class1, class2');只输入一个参数。

答案 2 :(得分:0)

“.prepend()方法将指定的内容作为jQuery集合”http://api.jquery.com/prepend/

中每个元素的第一个子元素插入

由于您在具有“a”类的元素中定位具有类“fieldname”的所有元素,因此输出正确。

答案 3 :(得分:0)

  

但出于某种原因,如果我使用   $thisField.prepend("hi");它结束了   在文本之前放好   Question 1,但不是<div>之前。

你试过这个吗?

$.each($('.a'), function(){
  $('hi').insertBefore($('.fieldname', $(this)));
});

答案 4 :(得分:0)

我不确定您对多个选择器的意思,因为我看到您正在做的只是选择<div class="fieldname">。所有.prepend正在做的是在hi的内容之前添加div

所以这里你没有选择多个元素。

答案 5 :(得分:0)

多个选择器在选择器字符串 ..

中工作 像这样

$multiple= $('.fieldname, a'); 
// this will select all <a> elements and all elements with class 'fieldname'

答案 6 :(得分:0)

$.each($('.a')

表示“对于每个具有class = a的元素”(在这种情况下,只有你的span),所以如果你的div也有class = a那么你会看到你期望的结果。