0

I have a part of html code with some links:

<a href="/folder/file1.txt">file1.txt</a><br>
<a href="/folder/file2.txt">file2.txt</a><br>
<a class="folders" href="/folder/folder1">folder1</a><br>
<a class="folders" href="/folder/folder2">folder2</a><br>
<a href="/folder/file3.txt">file3.txt</a><br>

I can't change the order of this elements on the server side with php - only resort them in browser. So how can i make (with pure js or, if it is impossible, with jquery) elements with class "folders" be the first, like this:

<a class="folders" href="/folder/folder1">folder1</a><br>
<a class="folders" href="/folder/folder2">folder2</a><br>
<a href="/folder/file1.txt">file1.txt</a><br>
<a href="/folder/file2.txt">file2.txt</a><br>
<a href="/folder/file3.txt">file3.txt</a><br>
1
  • Start with [...elements].sort() Commented Aug 17, 2021 at 12:26

1 Answer 1

1

You should then first identify the parent node, and then find each .folder node and move it before the first a element within that container. Make sure to also move the br elements with them.

Here is a snippet:

let parent = document.querySelector("a.folders");
if (parent) { // Otherwise there is nothing to do
    parent = parent.parentNode;
    let first = parent.querySelector("a:not(.folders)");
    if (first) { // Otherwise there is nothing to do
        for (let folder of  parent.querySelectorAll("a.folders")) {
            let br = folder.nextElementSibling;
            parent.insertBefore(folder, first);
            parent.insertBefore(br, first);
        }
    }
}
<a href="/folder/file1.txt">file1.txt</a><br>
<a href="/folder/file2.txt">file2.txt</a><br>
<a class="folders" href="/folder/folder1">folder1</a><br>
<a class="folders" href="/folder/folder2">folder2</a><br>
<a href="/folder/file3.txt">file3.txt</a><br>

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.