Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

149
Views
Ordenar números numéricamente en una división

Estoy tratando de ordenar los números en un div en orden numérico. Pero aunque el código se ve bien, simplemente no funciona. Así que estoy viendo si alguien tiene alguna idea?

En la página hay varios divs en una página en este formato, todos con el mismo nombre de clase.

 <div class="class-numbers">14, 16, 18, 25, 3, 38, 41, 9</div>

Estoy tratando de ordenar estos números, en orden numérico al cargar la página. Así que los almacené en una matriz e intenté hacer la función .sort(). Pero todavía no ha funcionado.

 $(function() { let textArray = []; $('.class-numbers').contents().each(function () { textArray.push($(this).text()); }); textArray.sort(function(a, b) { return a - b; }); console.log(textArray); });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="class-numbers">14, 16, 18, 25, 3, 38, 41, 9</div>

El registro de la consola parece registrar en la consola la matriz de cada div con números de clase. ¿Pero no parece ordenarlos numéricamente?

Cualquier ayuda es apreciada.

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Está empujando una sola cadena a su matriz con $(this).text() , no los valores individuales. Divida la cadena con textArray = $(this).text().split(',');

Ejemplo:

 let textArray = []; $('.class-numbers').each(function() { textArray = $(this).text().split(','); textArray.sort(function(a, b) { return a - b; }); console.log(textArray); $(this).text(textArray.join(', ')) });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="class-numbers">14, 16, 18, 25, 3, 38, 41, 9</div> <div class="class-numbers">9, 8, 7, 6, 5, 4, 3, 2, 1</div> <div class="class-numbers">55, 11, 76, 2, 14</div>

about 4 years ago · Juan Pablo Isaza Report

0

En función de sus requisitos, que ha aclarado en sus comentarios, desea:

  1. Realice la clasificación de números separados por comas en cada div.class-numbers individualmente
  2. Sobrescriba el contenido de texto de cada div con los números recién ordenados

Es bastante sencillo: simplemente usa .text() y le pasa una función , que devolverá la matriz ordenada de números. .text() acepta una función y usará el valor de retorno para establecer el texto interno del elemento.

Esta es una de las cosas "mágicas" de jQuery, es que .text() , como muchos otros métodos, recorre implícitamente la colección: ni siquiera necesita usar .each() primero. Estos métodos operan con conjuntos de elementos coincidentes en mente, énfasis mío:

Establezca el contenido de cada elemento en el conjunto de elementos coincidentes con el texto especificado.

Esto nos da el código de la siguiente naturaleza:

 $('.class-numbers').text(function(_i, text) { return text.split(',').sort(function(a, b) { return a - b; }).join(','); });

Sin embargo, si está familiarizado con ES6, podemos agrupar todo esto en una sola línea (sacrificando algo de legibilidad y pérdida de referencia a this , que de todos modos no necesitará en este caso):

 $('.class-numbers').text((_,t) => t.split(',').sort((a,b) => ab).join(', '));

Vea la prueba de concepto a continuación:

 $('.class-numbers').text((_,t) => t.split(',').sort((a,b) => ab).join(', '));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="class-numbers">14, 16, 18, 25, 3, 38, 41, 9</div> <div class="class-numbers">73, 16, 37, 22, 1</div>

Por supuesto, siempre hay una solución JS nativa sin necesidad de jQuery;)

 document.querySelectorAll('.class-numbers').forEach(el => { el.textContent = el.textContent .split(',') .sort((a,b) => ab) .join(', '); });
 <div class="class-numbers">14, 16, 18, 25, 3, 38, 41, 9</div> <div class="class-numbers">73, 16, 37, 22, 1</div>

about 4 years ago · Juan Pablo Isaza Report

0

Intente dividir el texto en elementos antes de ordenarlos.

 textArray = $(this).text().split(', ')

Es posible que también desee convertirlos en números.

 textArray = $(this).text().split(', ').map(it => parseInt(it))
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!