transcurridos tiempo meses intervalos horas entre ejecucion dias contador calcular javascript jquery

tiempo - intervalos javascript



Medir cuadro delimitador de nodo de texto en Javascript (2)

Tengo problemas para obtener el tamaño, en píxeles, de un nodo de texto con Javascript. Ejemplo:

<p> first text block <b>second text block</b> </p>

Necesito obtener el cuadro delimitador de los dos bloques de texto de forma independiente. Podría obtener el tamaño del segundo bloque simplemente midiendo el elemento <b>, pero el primero me elude. No parece que los nodos de texto en Javascript tengan una altura o anchura, por lo que puedo decir.

Ajustar el primer bloque de texto en un <span> y medirlo no es una opción, porque descubrí que un tramo no necesariamente hereda todos los estilos que están encima, y ​​cuando encierro el texto, de repente cambia de tamaño. Es como el principio de incertidumbre de Heisenberg de Javascript; Mi intento de medir algo lo cambia.

Estoy creando una aplicación que divide el HTML en páginas (EPUB HTML, en realidad), y necesito saber la posición, la altura y el ancho de cada bloque de texto en la página para saber si debo ponerlo en esta página o la siguiente pagina

¿Alguna sugerencia?


Intenta hacer los elementos que deseas medir en línea. Los elementos en línea solo ocupan tanto espacio como sea necesario. Por lo tanto, tiene un ancho y una altura absolutos que se pueden recuperar con javascript. Los elementos de bloque llenan todo el ancho del elemento contenedor. Por lo tanto javascript no puede acceder a su ancho.


Puede hacer esto con un Range que admita las extensiones de vista de CSSOM , que son los navegadores más recientes (Firefox 4+, WebKit desde principios de 2009, Opera 11, tal vez antes) y un TextRange en IE. El código de TextRange es tedioso, así que lo he omitido aquí.

jsFiddle: http://jsfiddle.net/gdn6C/1/

Código:

function getTextNodeHeight(textNode) { var height = 0; if (document.createRange) { var range = document.createRange(); range.selectNodeContents(textNode); if (range.getBoundingClientRect) { var rect = range.getBoundingClientRect(); if (rect) { height = rect.bottom - rect.top; } } } return height; }