我有这个标记(删除了所有不必要的信息)
<li>
<a></a>
<strong class="listingAmount">1</strong>
<strong class="listingPrice">10</strong>
<form class="marketListing">
<select>
</select>
<input />
</form>
</li>
我正在尝试在jquery中的选择框的.listingAmount
上获取.listingPrice
和change event
的值。我尝试了很多涉及.parent()
,.prev()
,.closest()
和其他很多方法的方法,但似乎无法得到它!
到目前为止我的jquery,
$('.marketListing select').change(function() {
var price = $(this).parent().prev('.listingPrice').text();
var amount = $(this).parent().prev('listingAmount').text();
alert(price);
alert(amount);
});
如何获取select
之前的所需值?
由于
答案 0 :(得分:2)
您要查找的功能是prevAll
而不是prev
。 prev
函数仅搜索前一个节点,而prevAll
将搜索所有先前的节点。这是一个功能齐全的小提琴
小提琴:http://jsfiddle.net/UasBq/
$('.marketListing select').change(function() {
var price = $(this).parent().prevAll('.listingPrice').text();
var amount = $(this).parent().prevAll('.listingAmount').text();
alert(price);
alert(amount);
});
答案 1 :(得分:0)
我可能会在<li>
上放一个课程,以便我有一个已知且容易找到的容器,然后你去<li>
然后回来找你对此感兴趣:
<ul>
<li class="container">
<!-- ... -->
</li>
</ul>
$('select').change(function() {
var $cont = $(this).closest('.container');
var amount = $cont.find('.listingAmount').text();
var price = $cont.find('.listingPrice').text();
// ...
});
演示:http://jsfiddle.net/ambiguous/kAejF/
这比尝试使用prev
和prevAll
更有利于你的jQuery与你的HTML非常松散地结合:你只需要简单的包含,嵌套和内部结构是无关紧要的。
答案 2 :(得分:0)
我认为你很亲密:
$('.marketListing select').change(function() {
var li = $(this).closest('li');
var price = $('.listingPrice', li).text();
var amount = $('.listingAmount', li).text();
alert(price);
alert(amount);
});
答案 3 :(得分:0)
我认为你做的事情如下:
$('.marketListing select').change(function() {
var price = $(this).parents('form').prevAll('.listingPrice:first').text();
var amount = $(this).parents('form').prevAll('.listingAmount:first').text();
...
...
});
这将从select中找到第一个父FORM元素。然后它会扫描所有以前的兄弟姐妹并找到第一个.listingPrice(和.listingAmount)。
我使用:首先是因为有多个.listingPrice类是表单的兄弟。我没有添加:首先是父母('form'),因为如果你有嵌套的表单元素,你会遇到更大的问题:P