Reputation: 2285
Can I add a class to certain position, to keep some order since it contradicts with some logic that targets the class by its position ?
link.closest('item').classList.add('c-class')
// Contradicton We need (a-class) insted I get (c-class) that has been added
let getThisClass = e.target.parentElement.classList[1]
<!-- before adding -->
<li class="item aclass bclass" id="60fe102d6e87274484dd2785"></li>
<!-- after adding -->
<li class="item c-class a-class b-class" id="60fe102d6e87274484dd2785"></li>
Upvotes: 0
Views: 1165
Reputation: 31992
You can try splitting the className
by spaces, inserting an item at a certain position of the resulting array (with the use of Array#splice
) and reassigning back to the className
after joining by spaces:
const link = document.getElementById("60fe102d6e87274484dd2785");
list = link.className.split(" ");
list.splice(1, 0, "c-class")
link.className = list.join(" ");
console.log(link.className);
<!-- before adding -->
<li class="item aclass bclass" id="60fe102d6e87274484dd2785"></li>
As a generic function:
const link = document.getElementById("60fe102d6e87274484dd2785");
insertClassAtPosition(link, "c-class", 1);
console.log(link.className);
function insertClassAtPosition(element, className, index){
let l = element.className.split(" ");
l.splice(index, 0, className);
element.className = l.join(" ");
}
<!-- before adding -->
<li class="item aclass bclass" id="60fe102d6e87274484dd2785"></li>
Upvotes: 5
Reputation: 9782
// get the link
const link = document.getElementById("link");
// get the item
const item = link.closest('.item');
// append c-class
item.className += ' c-class';
console.log(item.className);
// remove c-class
item.className = item.className.replace(/c-class/,'').trim();
console.log(item.className);
<!-- before adding -->
<li class="item a-class b-class" id="60fe102d6e87274484dd2785"><a id="link">#</a></li>
Upvotes: 1