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>
答案 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那么你会看到你期望的结果。