由于某种原因,我在选择另一个元素上方的元素时遇到了麻烦。我想选择位于.discount-dropdown
班级之外的最近的.discount-type
班级。我做错了什么?
HTML(其中的多个):
<div class="input-group-btn">
<button type="button" class="btn btn-default dropdown-toggle discount-dropdown" data-toggle="dropdown" aria-expanded="false">$ <span class="caret"></span></button>
<ul class="dropdown-menu dropdown-menu-right adjustment-dropdown" role="menu">
<li><a class="discount-type">$</a></li>
<li><a class="discount-type">%</a></li>
</ul>
</div>
jQuery的:
$('.discount-type').on('click', function(event){
$sign = $(this).html().substr(0,1);
$parentElement = $(this).closest('.discount-dropdown').html(); //this isn't working
$newHtml = $sign + $parentElement.substr(1);
alert($newHtml);
});
答案 0 :(得分:1)
因为按钮不是li
$('.discount-type').on('click', function(event){
$sign = $(this).html().substr(0,1);
$parentElement = $(this).closest('ul').prev('.discount-dropdown').html(); //this isn't working
$newHtml = $sign + $parentElement.substr(1);
alert($newHtml);
});
我建议您更新货币的方式有一些变化,例如
$('.discount-type').on('click', function(event) {
var sign = $(this).html().substr(0, 1);
$(this).closest('ul').prev('.discount-dropdown').find('.currency').text(sign)
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="input-group-btn">
<button type="button" class="btn btn-default dropdown-toggle discount-dropdown" data-toggle="dropdown" aria-expanded="false"><span class="currency">$</span> <span class="caret"></span></button>
<ul class="dropdown-menu dropdown-menu-right adjustment-dropdown" role="menu">
<li><a class="discount-type">$</a></li>
<li><a class="discount-type">%</a></li>
</ul>
</div>
&#13;
答案 1 :(得分:1)
最近的函数将搜索具有给定条件的最近父级,您的按钮不是元素的任何父级。因此,使用最近可以用于查找元素的父级 - 折扣类型和按钮。拥有父母的处理程序,你可以找到你的按钮。
$buttonElement = $(this).closest('.input-group-btn').find('.discount-dropdown').html();
答案 2 :(得分:0)
试试这个
$('.discount-type').on('click', function(event){
$sign = $(this).html().substr(0,1);
$parentElement = $(this).parent().parent().parent().find('.discount-dropdown').html(); //this is working fine
$newHtml = $sign + $parentElement.substr(1);
alert($newHtml);
});
答案 3 :(得分:0)
使用closest('ul')
代替closest('.discount-dropdown')
。
您还可以使用parentsUntil
+ parent
$(this).parentsUntil('.discount-dropdown').parent().html();