jQuery para reemplazar el número exacto
Frecuentes
Visto 351 equipos
0
Tengo algunos divs con números del 0 al 3200 y quiero reemplazarlos con un carácter.
ejemplo de html:
<div>2</div>
<div>6</div>
<div>26</div>
ejemplo de jQuery:
$('div').text(function () {
return $(this).text().replace("1","K").replace("2","/").replace("3","@").replace("4","r").replace("5","[").replace("6","[").replace("7","[").replace("8",",").replace("9",",").replace("10","J").replace("11",",").replace("12",",").replace("13","P").replace("14","]").replace("15","]").replace("16","]").replace("17","R").replace("18","R").replace("19","N").replace("20","N").replace("21","N").replace("22","N").replace("23","W").replace("24","L").replace("25","d").replace("26","D").replace("27","(").replace("28","B").replace("29","b").replace("30","B").replace("31","a").replace("32","A").replace("33","f").replace("34","F").replace("35","[").replace("36",":").replace("37","@").replace("38","@").replace("39","!").replace("40","?").replace("41","Z").replace("42","]").replace("43","Z").replace("44","B").replace("45","@").replace("46","]").replace("47","@").replace("0","V").replace("3200","c");
});
Lo que tengo para 2 - / correcta, por 6 - [ correcta, y por 26 - /[ Mal para 26 debe ser D.
¿Pueden ayudarme con mi código jQuery, por favor? Vive jsFiddle aquí: http://jsfiddle.net/UEy7w/
6 Respuestas
1
Yo sugeriría el enfoque:
var charMap = {
'1' : 'K',
'2' : '/',
'3' : '@',
'4' : 'r',
'6' : '[',
'26' : 'D'
// please fill in the rest yourself
};
$('div').text(function (i,t) {
return charMap[t] || t;
});
Este enfoque evita la 2
y 6
of 26
siendo evaluado por separado al aprobar la totalidad del texto existente t
del elemento como clave para la charMap
objeto y devolver el carácter relevante o, si no existe uno para ese texto, devolver el texto anterior.
Referencias:
- JavaScript 'simple':
- jQuery:
Respondido 12 Feb 14, 07:02
Hola David, tu enfoque es increíble. Gracias. - qruza
Eres muy bienvenido; ¡Me alegro de haber sido de ayuda! :) - David Thomas
1
Debe reemplazar 26 antes de reemplazar 2... de lo contrario, el 2 de 26 ya será reemplazado
Respondido 12 Feb 14, 07:02
0
La función de reemplazo se ejecuta en el orden de izquierda a derecha. Entonces, antes de su código para reemplazar un 26
es llamado, el 2 y el 6 ya han sido reemplazados.
Solución: Reordenar las llamadas a .replace()
, asegurando que ninguno en la cadena romperá cualquier reemplazo futuro (= más a la derecha).
Mejor solución: hagas lo que hagas, no lo hagas, parece que está hecho para fallar.
Respondido 12 Feb 14, 07:02
0
26 está siendo reemplazado por 2 y 6 respectivamente. Coloque el código de reemplazo de un solo dígito después del código de reemplazo de dos dígitos. Intente esto:
$('div').text(function () {
return $(this).text().replace("10","J").replace("11",",").replace("12",",").replace("13","P").replace("14","]").replace("15","]").replace("16","]").replace("17","R").replace("18","R").replace("19","N").replace("20","N").replace("21","N").replace("22","N").replace("23","W").replace("24","L").replace("25","d").replace("26","D").replace("27","(").replace("28","B").replace("29","b").replace("30","B").replace("31","a").replace("32","A").replace("33","f").replace("34","F").replace("35","[").replace("36",":").replace("37","@").replace("38","@").replace("39","!").replace("40","?").replace("41","Z").replace("42","]").replace("43","Z").replace("44","B").replace("45","@").replace("46","]").replace("47","@").replace("0","V").replace("3200","c").replace("1","K").replace("2","/").replace("3","@").replace("4","r").replace("5","[").replace("6","[").replace("7","[").replace("8",",").replace("9",",");
});
Respondido 12 Feb 14, 07:02
Y ahora el sencillo 2
no está siendo reemplazado en absoluto. Acabas de romper el reemplazo del 2
. - cerbro
No lo tuve en cuenta. Gracias cebrus actualizado ahora. - milind anantwar
Ahora estás haciendo exactamente lo que yo hice, excepto que te olvidaste del 3200
. - cerbro
0
Primero, reemplaza los números más largos, como 26
. Luego, reemplaza 2
. De esa manera, el 2
in 26
no será reemplazado antes de que pueda "reconocer" el 26
.
Esto debería funcionar:
$('div').text(function () {
return $(this).text()
.replace("3200","c")
.replace("10","J")
.replace("11",",")
.replace("12",",")
.replace("13","P")
.replace("14","]")
.replace("15","]")
.replace("16","]")
.replace("17","R")
.replace("18","R")
.replace("19","N")
.replace("20","N")
.replace("21","N")
.replace("22","N")
.replace("23","W")
.replace("24","L")
.replace("25","d")
.replace("26","D")
.replace("27","(")
.replace("28","B")
.replace("29","b")
.replace("30","B")
.replace("31","a")
.replace("32","A")
.replace("33","f")
.replace("34","F")
.replace("35","[")
.replace("36",":")
.replace("37","@")
.replace("38","@")
.replace("39","!")
.replace("40","?")
.replace("41","Z")
.replace("42","]")
.replace("43","Z")
.replace("44","B")
.replace("45","@")
.replace("46","]")
.replace("47","@")
.replace("0","V")
.replace("1","K")
.replace("2","/")
.replace("3","@")
.replace("4","r")
.replace("5","[")
.replace("6","[")
.replace("7","[")
.replace("8",",")
.replace("9",",");
});
Respondido 12 Feb 14, 08:02
No hay problema, @qqruza. Considere aceptar esta respuesta, pero también eche un vistazo a lo que publicó David Thomas, ya que es una solución más elegante. - cerbro
0
Esto se debe a que está llamando a .replace() de forma recursiva en un texto ya reemplazado.
Así es como funciona su código ahora.
"26".replace(2,'\')
"\6".replace((6,'[')
Si coloca su .replace('26',D) delante de todos los demás reemplazos, funcionará como se esperaba.
Aquí está el violín: http://jsfiddle.net/bEqwP/1/
Pero no es así como debes proceder. Dije esto solo para hacerte entender lo que está sucediendo detrás de escena. Yo sugeriría el enfoque mencionado por David Thomas
Respondido 12 Feb 14, 08:02
Lo he hecho en mi jsFiddle pero parece que no funciona ;-( - qruza
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas javascript jquery or haz tu propia pregunta.
lo que quieres puedes explicarlo claramente - I'm Geeker