Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How can i wap the position of the label and the input tag with javascript?

I’m using elementor in wordpress, i’cant modify the html directly, so i need to swap both tags with javascript (or css if that’s possible) in the form.

The code i’m using in CSS:

    input:focus > .elementor-field-label {
    border: 1px solid black !important;
    border-radius: 5px;
    transform: translate(0px, -20px);
    font-size: 14px;
}

Won’t work because of the position of the tags.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Then i tried this code in javascript to do the job:

    $('label').each(function() {
   $(this).insertAfter($(this).nextAll('input:first'));
});

But don’t work.

So, how can i make this possible?

FIY:
The structure of this specific part of the form is this:

     <div class="elementor-field-type-text elementor-field-group elementor-column elementor-field-group-name elementor-col-100 elementor-field-required"> /*Using just the elementor-field-group*/
          <label for="form-field-name" class="elementor-field-label"> Texto </label>
          <input size="1" type="text" name="form_fields[name]" id="form-field-name" class="elementor-field elementor-size-sm  elementor-field-textual" required="required" aria-required="true">
     </div>

>Solution :

With CSS you could do something like this:

.elementor-field-group {
  display: flex;
  flex-flow: column;
}

.elementor-field-group input {
  order: -1;
}

This wouldn’t change the HTML structure but visually they would swap position.

With Javascript you can do it like this:

document.querySelectorAll('.elementor-field-group label').forEach((e) => {
    e.parentNode.appendChild(e)
})

This script just takes the label and appends it to the parent again, so it will be the last child of the wrapper.

Or this, to add the input element before the label. This would be the better solution, if there are more than those two elements inside of the wrapper.

document.querySelectorAll('.elementor-field-group input').forEach((e) => {
  e.parentNode.insertBefore(e, e.previousElementSibling);
})
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading