• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

116
Views
Cómo apuntar a divs con otro contenido usando DOM

Tengo un montón de divs con algo de texto en ellos. Estoy tratando de crear una función simple que apunte a divs con un texto específico y les dé una clase. También quiero dar a los divs con otro texto una clase común.

Me las arreglé para apuntar a los divs con los textos específicos, pero no puedo averiguar cómo apuntar a los divs con otros textos.

este es el html

 <h1>The divs</h1>

 <div>High</div>
 <div>Low</div>
 <div>Medium</div>

 <div>Hit 'em high</div>
 <div>Medium rare</div>

 <div>A funky name</div>

y esta es la funcion

 const divs = document.querySelectorAll('div');
function classChanger () {
 for (let i = 0; i < divs.length; i++) {
 if (divs[i].textContent === 'High') {
 divs[i].classList.add('high');
 } if (divs[i].textContent === 'Medium') {
 divs[i].classList.add('medium');
 } if (divs[i].textContent === 'Low') {
 divs[i].classList.add('low');
 } if (divs[i].textContent === 'anything') {
 divs[i].classList.add('none');
 } 
 }
};

classChanger();

He intentado usar varios estados if más con !== 'Alto' y así sucesivamente, pero simplemente sobrescriben el código anterior.

Entonces, solo me pregunto, ¿cómo me dirijo a los últimos tres divs y no les doy la clase ninguno? He intentado buscar en Google, pero no creo que esté buscando en Google la pregunta correcta, por eso estoy preguntando aquí.

almost 3 years ago · Santiago Trujillo
3 answers
Answer question

0

Puede agregar High , Medium y Low a una matriz. A medida que recorre los elementos, verifique si la matriz includes el texto (y establezca la clase en la versión en minúsculas del texto), de lo contrario, agregue una clase none .

 const divs = document.querySelectorAll('div');

const range = ['High', 'Medium', 'Low'];

function classChanger() {
 for (let i = 0; i < divs.length; i++) {
 const text = divs[i].textContent;
 if (range.includes(text)) {
 divs[i].classList.add(text.toLowerCase());
 } else {
 divs[i].classList.add('none');
 }
 }
}

classChanger();
 .high { color: red; }
.medium { color: orange; }
.low { color: yellow; }
.none { color: darkgray; }
 <div>High</div>
<div>Low</div>
<div>Medium</div>

<div>Hit 'em high</div>
<div>Medium rare</div>

<div>A funky name</div>

almost 3 years ago · Santiago Trujillo Report

0

Puede usar una declaración else if como esta:

 const divs = document.querySelectorAll("div");
function classChanger() {
 for (let i = 0; i < divs.length; i++) {
 if (divs[i].textContent === "High") {
 divs[i].classList.add("high");
 } else if (divs[i].textContent === "Medium") {
 divs[i].classList.add("medium");
 } else if (divs[i].textContent === "Low") {
 divs[i].classList.add("low");
 } else {
 divs[i].classList.add("none");
 }
 }
}

classChanger();
almost 3 years ago · Santiago Trujillo Report

0

Si desea orientar elementos en función del contenido, primero debe crear una función para tal fin como:

 function queryElementsWithFilter(selector, filterCallback) {
 if (typeof selector !== 'string') throw new TypeError('param 1 must be a string')
 if (typeof filterCallback !== 'function') throw new TypeError('param 2 must be a function')

 const nodes = [...document.querySelectorAll(selector)]
 return nodes.filter(filterCallback)
}

Ahora puedes obtener los elementos que quieras y hacer cualquier cosa con ellos.

 const textTokens = ['High', 'Medium', 'Low']

textTokens.forEach(textToken => {
 const divCollection = queryElementsWithFilter(
 'div',
 node => node.textContent === textToken
 )

 divCollection.forEach(div => div.classList.add(textToken.toLowerCase()))
})

const unmatchedNodes = queryElementsWithFilter(
 'div',
 node => !textTokens.includes(node.textContent)
)

unmatchedNodes.forEach(div => div.classList.add('none'))
almost 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error