Foros del Web » Programando para Internet » Javascript »

cuantos lineas de texto tengo en un div?

Estas en el tema de cuantos lineas de texto tengo en un div? en el foro de Javascript en Foros del Web. Hola que tal necesito verdaderamente ayuda con esto!!! Necesito cortar el texto a partir de la 5 ta linea de texto que tengo en un ...
  #1 (permalink)  
Antiguo 08/10/2008, 20:59
 
Fecha de Ingreso: mayo-2008
Mensajes: 111
Antigüedad: 16 años, 5 meses
Puntos: 1
Exclamación cuantos lineas de texto tengo en un div?

Hola que tal necesito verdaderamente ayuda con esto!!!
Necesito cortar el texto a partir de la 5 ta linea de texto que tengo en un div, digamos q de la 6 ta linea inclusive en adelante lo tengo que cortar.
GRACIAS
  #2 (permalink)  
Antiguo 08/10/2008, 21:22
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: cuantos lineas de texto tengo en un div?

Fijate si algo así te sirve (y no repitas tus mensajes):
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<
title>test</title>
<
script>
onload=function(){
/* esto es para averiguar cual es el valor offsetTop del último renglón, que en este caso es 89 (aparece como title en cada letra)
    var txt='<span onmouseover="this.title=this.offsetTop">'+document.getElementById('ej').innerHTML.split('').join('</span><span  onmouseover="this.title=this.offsetTop">')+'</span>';
    document.getElementById('ej').innerHTML=txt;
*/
    
var txt='<span>'+document.getElementById('ej').innerHTML.split('').join('</span><span>')+'</span>';
    
document.getElementById('ej').innerHTML=txt;
    var 
t='';
    for(var 
i=0l=document.getElementById('ej').getElementsByTagName('span'),ll=l.length;i<ll;i++)
        if(
l[i].offsetTop<=89)
            
t+=l[i].innerHTML;
        else
            break;
        
document.getElementById('ej').innerHTML=t;
}
</script>
</head>

<body>
<div id="ej" style="width:300px; height:200px;">Hola que tal necesito verdaderamente ayuda con esto!!!
Necesito cortar el texto a partir de la 5 ta linea de texto que tengo en un div, digamos q de la 6 ta linea inclusive en adelante lo tengo que cortar.
GRACIASHola que tal necesito verdaderamente ayuda con esto!!! Necesito cortar el texto
a partir de la 5 ta linea de texto que tengo en un div, digamos q de la 6 ta
linea inclusive en adelante lo tengo que cortar. GRACIAS</div>
</body>
</html> 
  #3 (permalink)  
Antiguo 09/10/2008, 04:21
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: cuantos lineas de texto tengo en un div?

Y así te evitás los testeos y funcionará en cualquier ubicación de la página:
Código PHP:
<html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<
title>test</title>
<
script>
Array.
prototype.inArray=function(el){
    for(var 
i=0,l=this.length;i<l;i++)
        if(
this[i]==el)
            return 
true;
    return 
false;
}
onload=function(){
    var 
txt='<span>'+document.getElementById('ej').innerHTML.split('').join('</span><span>')+'</span>';
    
document.getElementById('ej').innerHTML=txt;
    var 
t='';
    var 
cuenta=[];
    for(var 
i=0l=document.getElementById('ej').getElementsByTagName('span'),ll=l.length;i<ll;i++){
        if(!
cuenta.inArray(l[i].offsetTop))
            
cuenta.push(l[i].offsetTop);
        if(
cuenta.length<6)
            
t+=l[i].innerHTML;
        else
            break;
    }
    
document.getElementById('ej').innerHTML=t;
}
</script>
</head>

<body><br />
<br />
<br />
<br />
<br />
<br />
<br />
<div id="ej" style="width:300px; height:200px;">Hola que tal necesito verdaderamente ayuda con esto!!!
Necesito cortar el texto a partir de la 5 ta linea de texto que tengo en un div, digamos q de la 6 ta linea inclusive en adelante lo tengo que cortar.
GRACIASHola que tal necesito verdaderamente ayuda con esto!!! Necesito cortar el texto
a partir de la 5 ta linea de texto que tengo en un div, digamos q de la 6 ta
linea inclusive en adelante lo tengo que cortar. GRACIAS</div>
</body>
</html> 

Última edición por Panino5001; 09/10/2008 a las 06:05
  #4 (permalink)  
Antiguo 30/10/2008, 15:26
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Respuesta: cuantos lineas de texto tengo en un div?

Empecé a escribir éste mensaje por lo menos 3 veces. Y cada vez aparecía algo más para comentar que me obligaba a reescribir lo anterior. Hago esta aclaración porque ya no pienso seguir editando, y dejo lo que tengo, que ahora puede ser un poco inconexo.

Primero y principal : muy bueno el código Panino5001, es de esos que a mi me gustán porque tiene 5001 cosas para desarmar y estudiar, más allá de la idea. (Bué, más o menos como todos los tuyos.)

Al verlo recordé algunos temas donde se trató el asunto desde distintas necesidades, y por supuesto los busqué para hacer el clásico post-ring que los uniera.

Me encontré con viejos ejemplos que puse y no actualicé. Hoy existen nuevos navegadores y DTDs, así que antes que nada empecé con eso.

Después sí, me dediqué a probar tu ejemplo ... y me pasó algo raro.

En Internet Explorer 7 —no sé en otras versiones— me agrega un caracter. Quiero decir, que no termina en la línea que corresponde sino en la siguiente, con una sola letra y no con toda la línea.

Como cortaste el texto con split(''), pensé que había un error en el bucle y contaba uno de más.
Pero no. Contaba bien, y en Firefox y Opera funciona perfecto.

En la nebulosa de mi memoria me pareció recordar que ya había visto algo así en alguna parte de otro invento de MSIE. Como estaba ya revisando mis viejos ejemplos, aproveché para buscar. Y lo encontré.
Era un código que bajé no sé de qué sitio, porque no guardé los créditos. Y ni falta que hacía, porque funcionaba tan mal que me puse a reescribirlo todo, así que ahora es mío .

En el momento ese "error" era muy útil, y yo creí que aparecía porque usaba TextRange(); pero parece que no. El efecto era una especie de lupa que aumentaba una copia del texto en una capa al pasarle el puntero palabra por palabra. Cuando llegábamos a la última de una línea, si seguíamos avanzando nos mostraba la palabra siguiente —que en realidad estaba abajo, en la próxima línea— y servía como referencia para bajar el puntero y encontrar por dónde seguir leyendo. Era una ayuda para personas con poca visión.

Y el error es el mismo. En este caso cuenta la siguiente letra como si estuviese en la misma línea, cuando en realidad ya está abajo.

Preparé una versión que corrige el problema con un hack para IE : resta un caracter . Usé otra forma de reponer el texto ya cortado, con substring(), pero basicamente es lo mismo.

Ya estaba haciendo los enlaces y copiando los códigos para postear acá (agrego uno que mencioné en uno de los links, y por razones personales no voy a postear en ese tema) cuando tuve la brillante idea de probar tu contador en Chrome.
Se come una línea entera.

Tiré todo, me harté de las incompatibilidades, que lo arregle otro.

Acá está la versión para IE. Le puse un mensaje para que se pueda seguir la evolución del escript; y reduje las medidas para que no se hiciera tan largo.

Código:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<title>test</title>
<script>
Array.prototype.inArray=function(el){
    for(var i=0,l=this.length;i<l;i++)
        if(this[i]==el)
            return true;
    return false;
}
onload=function(){
var i , txt='<span>'+ document.getElementById('ej').innerHTML.split('').join('</span><span>') +'</span>';
    document.getElementById('ej').innerHTML = txt;
    var t='';
    var cuenta=[];
    for(var i=0, l=document.getElementById('ej').getElementsByTagName('span'),ll = l.length;i<ll;i++){
        if(!cuenta.inArray(l[i].offsetTop))
            cuenta.push(l[i].offsetTop);
        if(cuenta.length<3){
            t+=l[i].innerHTML;

		alert(t+"|"+i+"\r\n"+cuenta)
}
        else break;
    }
    document.getElementById('ej').innerHTML = (navigator.userAgent.indexOf('msie') != -1)? t : t.substring(0,i-1);

}
</script>
</head>

<body>

<br />
<br />
<br />
<br />
<br />
<br />
<div id="ej" style="width:100px; height:200px; border:1px solid red;">Hola que tal necesito verdaderamente ayuda con esto!!!
Necesito cortar el texto a partir de la 5 ta linea de texto que tengo en un div, digamos q de la 6 ta linea inclusive en adelante lo tengo que cortar. GRACIAS</div>
</body>
</html>
  #5 (permalink)  
Antiguo 30/10/2008, 15:27
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Respuesta: cuantos lineas de texto tengo en un div?

Éste es un método propietario para medir líneas que usa MSIE. En los último enlaces hay una versión previa.

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>NUMERA L&Iacute;NEAS. </title>

<style type="text/css">
body{font-size:100%; font-family:'times new roman' times serif;}
h3{text-align:center}
#contLin{position:absolute; top:0; left:5px; z-index:-1; }
.laLinea{text-align:right; vertical-align:bottom; font-weight:bold; font-size:75%; font-family:monospace; width:30px; }
#contTex{margin-left:30px; }

</style>

<script type="text/javascript">
var grisBlanco = "#cccccc";

function numerar() {            
if(document.all){
contLin.innerHTML = "";
grisBlanco = "#cccccc";

var lineas = "";
var leeLin = contTex.getClientRects();
var totLin= leeLin.length;

var arriba = leeLin[0].top + cuerpo.scrollTop;

lineas += "<table title='Click para destacar n\xfamero de l\xednea.' cellpadding=0 style='position:absolute; border-collapse:collapse; cursor:default; top:" +arriba+ "px; '>";

for(L=0; L<totLin; L++){
derecha = leeLin[L].right + cuerpo.scrollLeft;
izquierda = leeLin[L].left + cuerpo.scrollLeft;
arriba = leeLin[L].top + cuerpo.scrollTop;
abajo = leeLin[L].bottom + cuerpo.scrollTop;
grisBlanco = (grisBlanco == "#cccccc") ? "#eeeeee" : "#cccccc";

lineas += "<tr><td class='laLinea' onclick='destaca(this)' style='height:" +(abajo-arriba)+ "; background:" +grisBlanco+ "; '>" +L+ "</td></tr>";

}
lineas += "</table>";
contLin.innerHTML = lineas;
}
}

function destaca(T){
if(T.style.color == "#ff0000"){
T.style.color = "#000000";
T.removeAttribute("title");
}
else {
T.style.color = "#ff0000";
var rec = prompt("Escriba un recordatorio.", T.innerText);
T.title = (rec != null)? rec : T.innerText;
}
}

</script>
</head>
<body id="cuerpo" onload="numerar()" onresize="numerar()">

<h2>Numera l&iacute;neas de texto.</h2>
<p>N&uacute;meros en <tt>td</tt>. Destaca con <i>click</i>.
</p>

<div id="contTex">
<h3>Título.</h3>

&nbsp;Texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto. 
<h4>Subtítulo.</h4>
&nbsp;Texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto.<br />
&nbsp;Texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto.<br />
&nbsp;Texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto.<br />
&nbsp;Texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto. 
</div>
<div id="contLin"></div>

<p><br /><br /><br /></p>
</body></html>
Acá está el de la lupa.

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>LUPA DE TEXTO.</title>
<script type="text/javascript">
<!--
var zoom = false;
function Agranda(){ 
if(window.event.shiftKey){
  var MiTexto= document.body.createTextRange();
  var TextoBoton= Boton.createTextRange();
 
  document.body.style.cursor='hand';
  TextoBoton.text="";
  posX = window.event.x;
  posY = window.event.y;
  MiTexto.moveToPoint(posX,posY);
  MiTexto.expand("word",1);
  TextoBoton.text=MiTexto.text;
  if (posX > document.body.clientWidth*0.50){
    posX=posX-Boton.offsetWidth;}
  if (posY > document.body.clientHeight*0.50){
    posY=posY-Boton.offsetHeight;}
  Boton.style.left=(posX+document.body.scrollLeft)*1;
  Boton.style.top=(posY+document.body.scrollTop)*1;
  Boton.style.visibility='visible';  
 return true;
 } 
else{
  document.body.style.cursor='';
  Boton.style.visibility='hidden';  
}
}
//-->
</script>
<style type="text/css">
#Boton{font-size: 48px; background: cyan; visibility: hidden; font-family: arial; position: absolute}
i{font:16pt/26pt cursive}
.der{text-align:right; margin-right:10%; font-weight:600; text-decoration:underline}
</style>
</head>
<body onmousemove=Agranda()>
<h2>"Lupa " que sigue al puntero y muestra texto ampliado mientras se presiona [<font face="sans-serif" >SHIFT</font>].</h2>

<blockquote><i>
<b>La Casa Del Hombre.</b> <br><br>
Negros nubarrones <br>
enturbian mi camino <br>
a la casa del Hombre.<br>
¿Acaso no estuvieron siempre?. <br><br>
¿O es que mis defensas febriles <br>
han dejado pasar <br>
al saboteador de las sombras? <br><br>
Mira hermano<br>
a través de tus ojos<br>
y dime si el saboteador ha llegado ya.
<p class=der>RAYUELA.</p>
</i></blockquote>
<button id=Boton></button> 
</body></html>
Texto en dos columnas

Presentacion "por paginas"

saber el ANCHO de cada caracter que recorremos.[Buenos días a tod@s]

P.D. : Cuando me calmé un poco se me ocurrió que podemos ir rellenando con cada comprobación hasta el span que contamos, seguido de un bloque vacío. Y lo que medimos hasta arriba es el bloque, que siempre va a estar abajo porque por definición no es inline. Lo de Chrome es porque los espacios siempre los manda abajo en vez de seguir en la misma línea como los otros (¿Safari hace lo mismo?). Quizá si contamos del fin hacia el principio ... qué sé yo _
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:14.