I have a list several lists on my page see example below
<div id="test1" class="testlist">
<ul>
<li title="test" data-view="0">Any</li>
<li title="test" data-view="101">list item 101</li>
<li title="test" data-view="102">list item 102</li>
<li title="test" data-view="103">list item 103</li>
<li title="test" data-view="104">list item 104</li>
<li title="test" data-view="105">list item 105</li>
<li title="test" data-view="106">list item 106</li>
<li title="test" data-view="107">list item 107</li>
<li title="test" data-view="108">list item 108</li>
<li title="test" data-view="109">list item 109</li>
</ul>
</div>
<div id="test2" class="testlist">
<ul>
<li title="test" data-view="0">Any</li>
<li title="test" data-view="101">list item 101</li>
<li title="test" data-view="102">list item 102</li>
<li title="test" data-view="103">list item 103</li>
<li title="test" data-view="104">list item 104</li>
<li title="test" data-view="105">list item 105</li>
<li title="test" data-view="106">list item 106</li>
<li title="test" data-view="107">list item 107</li>
<li title="test" data-view="108">list item 108</li>
<li title="test" data-view="109">list item 109</li>
</ul>
</div>
I want the data-view attribute to have the name of the parent id.
Eg: in the first list data-view should be called data-viewtest1 and in the second list they should be data-viewtest2
I have the below js:
$("li").each(function () {
var id = $('.testlist').attr('id') || '';
console.log(id);
$(this).attr({
newData: $(this).attr('data-view'),
//data-view: $(this).attr('data-view'),
})
.removeAttr('data-view');
});
I can replace the attribute data-view and call it newData but if I try and rename it data-view
I get the syntax error
SyntaxError: missing : after property id
Is there a way to rename a data attribute? I want it to be :
data-view + id: $(this).attr('data-view'),
Also in the console.log I get 20 test1 where I should be getting 10 test1 and 10 test2, is there another way to approach this?
See full example:
$("li").each(function() {
var id = $('.testlist').attr('id') || '';
console.log(id);
$(this).attr({
newData: $(this).attr('data-view'),
//data-view: $(this).attr('data-view'),
})
.removeAttr('data-view');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="test1" class="testlist">
<ul>
<li title="test" data-view="0">Any</li>
<li title="test" data-view="101">list item 101</li>
<li title="test" data-view="102">list item 102</li>
<li title="test" data-view="103">list item 103</li>
<li title="test" data-view="104">list item 104</li>
<li title="test" data-view="105">list item 105</li>
<li title="test" data-view="106">list item 106</li>
<li title="test" data-view="107">list item 107</li>
<li title="test" data-view="108">list item 108</li>
<li title="test" data-view="109">list item 109</li>
</ul>
</div>
<div id="test2" class="testlist">
<ul>
<li title="test" data-view="0">Any</li>
<li title="test" data-view="101">list item 101</li>
<li title="test" data-view="102">list item 102</li>
<li title="test" data-view="103">list item 103</li>
<li title="test" data-view="104">list item 104</li>
<li title="test" data-view="105">list item 105</li>
<li title="test" data-view="106">list item 106</li>
<li title="test" data-view="107">list item 107</li>
<li title="test" data-view="108">list item 108</li>
<li title="test" data-view="109">list item 109</li>
</ul>
</div>
$(selector).attr('id')will return only the first matched element ID