Reputation: 250
I have element structure as follows:
<div class="qty-adjust-inner">
<a class="btn btn-min">
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">-</font></font>
</a>
<div class="value">
<input type="hidden" value="1" />
<span data-bind="text: $parent.qty" class="qty_value">
<font style="vertical-align: inherit;"> <font style="vertical-align: inherit;" class="">120</font></font>
</span>
</div>
<a class="btn btn-plus">
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">+</font></font>
</a>
</div>
I need to increment/decrement the value "120" on .btn-min
and .btn-plus
class buttons.
I tried to access the value using var value = $('.btn-min').find('.value').html();
and also find, children but not getting the results.
Edit: As pointed out by @Taplar the value section is not a child of the anchor tag. The problem is there are many anchor tags like these, and I need to increment the very next adjacent value having class value
Upvotes: 3
Views: 117
Reputation: 42054
....there are many anchor tags like these, and I need to get the value of the element which is adjacent to the anchor
According to the comment you can combine.next('.value'), .prev('.value'):
var ele = ($(this).next('.value').length > 0) ? $(this).next('.value') :
$(this).prev('.value');
+ele.find('span font:last').text();
$('.btn-min, .btn-plus').on('click', function(e) {
var ele = ($(this).next('.value').length > 0) ? $(this).next('.value') : $(this).prev('.value');
var val = +ele.find('span font:last').text();
if (this.classList.contains('btn-plus')) {
val++;
} else {
val--;
}
ele.find('span font:last').text(val);
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="qty-adjust-inner">
<a class="btn btn-min"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">-</font></font></a>
<div class="value">
<input type="hidden" value="1">
<span data-bind="text: $parent.qty" class="qty_value">
<font style="vertical-align: inherit;">
<font style="vertical-align: inherit;" class="">120</font></font></span>
</div>
<a class="btn btn-plus"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">+</font></font></a>
<br/>
<a class="btn btn-min"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">-</font></font></a>
<div class="value">
<input type="hidden" value="1">
<span data-bind="text: $parent.qty" class="qty_value">
<font style="vertical-align: inherit;">
<font style="vertical-align: inherit;" class="">220</font></font></span>
</div>
<a class="btn btn-plus"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">+</font></font></a>
<br/>
<a class="btn btn-min"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">-</font></font></a>
<div class="value">
<input type="hidden" value="1">
<span data-bind="text: $parent.qty" class="qty_value">
<font style="vertical-align: inherit;">
<font style="vertical-align: inherit;" class="">320</font></font></span>
</div>
<a class="btn btn-plus"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">+</font></font></a>
</div>
Upvotes: 1
Reputation: 250
Thanks a lot everyone to help me out here!
Special thanks to Taplar for pointing out that the value tag was not a child of the anchor tag but was adjacent to it. As there are many such anchor tags, I had to get the value of the element which is adjacent to it everytime.
Daniel Szalay's answer helped me here. I found the adjacent elements by using the following line:
$(document).on("click","a[class='btn btn-min']", function (e) {
//decrement product qty by 1
// var value = $('.value').find('span').text().trim();
var value =$(this).next().find('span').text().trim();
});
Upvotes: 1
Reputation: 28522
You can give class="values"
to easily get value i.e :120
and then check if the button which is click has class btn-minus
or btn-plus
depending on this increment/decrement values .
Demo Code :
$(" .btn").click(function() {
//get closest div with class qty-adjust-inner -> find .values
var selector =$(this).closest(".qty-adjust-inner").find(".values");
var values = parseInt(selector.text());
//check if it has class btn-min
if ($(this).hasClass("btn-min")) {
values--;//subtract by 1
} else if($(this).hasClass("btn-plus")) {
values++;//add by 1
}
selector.text(values)//put value again
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="qty-adjust-inner">
<a class="btn btn-min">
<font style="vertical-align: inherit;">
<font style="vertical-align: inherit;">-</font>
</font>
</a>
<div class="value">
<input type="hidden" value="1">
<span data-bind="text: $parent.qty" class="qty_value">
<font style="vertical-align: inherit;">
<!--give class-->
<font style="vertical-align: inherit;" class="values">120</font></font></span>
</div>
<a class="btn btn-plus">
<font style="vertical-align: inherit;">
<font style="vertical-align: inherit;">+</font>
</font>
</a>
</div>
Upvotes: 1
Reputation: 224
Take it easy
just add an id to that element
Demo :
$(document).on("click",".btn-min",function(){
let value = parseInt($(".value #result").html());
$(".value #result").html(value-1);
});
$(document).on("click",".btn-plus",function(){
let value = parseInt($(".value #result").html());
$(".value #result").html(value+1);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="qty-adjust-inner">
<a class="btn btn-min">
<font style="vertical-align: inherit;">
<font style="vertical-align: inherit;">-</font>
</font>
</a>
<div class="value">
<input type="hidden" value="1">
<span data-bind="text: $parent.qty" class="qty_value">
<font style="vertical-align: inherit;">
<font style="vertical-align: inherit;" id="result">120</font>
</font>
</span>
</div>
<a class="btn btn-plus">
<font style="vertical-align: inherit;">
´ <font style="vertical-align: inherit;">+</font>
</font>
</a>
</div>
Upvotes: 1
Reputation: 1828
As element containing .value class is a children of element containing .qty-adjust-inner you can search something like.
$('.qty-adjust-inner').find(".value").find('span').text().trim()
Upvotes: 2