Reputation: 39
My desired output for the below code should be:
a-b-c-d,e-f-g-h,i-j-k-l
Note the comma instead of -
after d
and h
.
But the below code results in
a-b-c-d-e-f-g-h-i-j-k-l,a-b-c-d-e-f-g-h-i-j-k-l,a-b-c-d-e-f-g-h-i-j-k-l,
I tried searching across stack overflow, but did not came across this type of question. Could someone please help me, please do not mark this question as repititive.
<div class="test1 yes">
<input type="text" class="xyz" value="a" />
<input type="text" class="xyz" value="b" />
<input type="text" class="xyz" value="c" />
<input type="text" class="xyz" value="d" />
</div>
<div class="test2 yes">
<input type="text" class="xyz" value="e" />
<input type="text" class="xyz" value="f" />
<input type="text" class="xyz" value="g" />
<input type="text" class="xyz" value="h" />
</div>
<div class="test3 yes">
<input type="text" class="xyz" value="i" />
<input type="text" class="xyz" value="j" />
<input type="text" class="xyz" value="k" />
<input type="text" class="xyz" value="l" />
</div>
<input type="submit" class='submit'>
<p class='count'></p>
<p class='test'></p>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
$('.submit').click(function(){
var count = $('.yes').length
$('.count').text(count);
var texts = "";
var i = 0;
while (i < count) {
texts += $(".xyz").map(function() { return this.value; })
.get().join('-') + ",";
i++;
}
$('.test').text(texts);
});
</script>
Upvotes: 0
Views: 378
Reputation: 1074385
Loop through the .yes
elements, building the array of their .xyz
elements and joining it with -
, then join the result with ,
:
var texts = $(".yes").map(function() {
return $(this).find(".xyz").map(function() {
return this.value;
}).get().join("-");
}).get().join(",");
Live Example:
$('.submit').click(function() {
var count = $('.yes').length
$('.count').text(count);
var texts = $(".yes").map(function() {
return $(this).find(".xyz").map(function() {
return this.value;
}).get().join("-");
}).get().join(",");
$('.test').text(texts);
});
// a-b-c-d,e-f-g-h,i-j-k-l
<div class="test1 yes">
<input type="text" class="xyz" value="a" />
<input type="text" class="xyz" value="b" />
<input type="text" class="xyz" value="c" />
<input type="text" class="xyz" value="d" />
</div>
<div class="test2 yes">
<input type="text" class="xyz" value="e" />
<input type="text" class="xyz" value="f" />
<input type="text" class="xyz" value="g" />
<input type="text" class="xyz" value="h" />
</div>
<div class="test3 yes">
<input type="text" class="xyz" value="i" />
<input type="text" class="xyz" value="j" />
<input type="text" class="xyz" value="k" />
<input type="text" class="xyz" value="l" />
</div>
<input type="submit" class='submit'>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<p class='count'></p>
<p class='test'></p>
<p style="font-weight: bold;" class="time text-center"></p>
More:
Upvotes: 1
Reputation: 6914
Instead of
var texts = "";
var i = 0;
while (i < count) {
texts += $(".xyz").map(function() { return this.value; })
.get().join('-') + ",";
i++;
}
just write
var texts = ''
$('.yes').each(function() {
textx += $(this).children('.xyz')
.map(function() { return this.value; })
.get().join('-') + ','
})
Upvotes: 0
Reputation: 191
It's happened because of your +=, which means it will append the result every iteration. My solution is to write only =.
<div class="test1 yes">
<input type="text" class="xyz" value="a" />
<input type="text" class="xyz" value="b" />
<input type="text" class="xyz" value="c" />
<input type="text" class="xyz" value="d" />
</div>
<div class="test2 yes">
<input type="text" class="xyz" value="e" />
<input type="text" class="xyz" value="f" />
<input type="text" class="xyz" value="g" />
<input type="text" class="xyz" value="h" />
</div>
<div class="test3 yes">
<input type="text" class="xyz" value="i" />
<input type="text" class="xyz" value="j" />
<input type="text" class="xyz" value="k" />
<input type="text" class="xyz" value="l" />
</div>
<input type="submit" class='submit'>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<p class='count'></p>
<p class='test'></p>
<p style="font-weight: bold;" class="time text-center"></p>
<script>
$('.submit').click(function(){
var count = $('.yes').length
$('.count').text(count);
var texts = "";
var i = 0;
while (i < count) {
texts = $(".xyz").map(function() { return this.value; })
.get().join('-') + ",";
i++;
}
$('.test').text(texts);
});
</script>
Upvotes: 0