Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Проблема с подсчетом строк в IE (https://javascript.ru/forum/css-html-internet-explorer/21026-problema-s-podschetom-strok-v-ie.html)

artnik 26.08.2011 12:52

Проблема с подсчетом строк в IE
 
Мне нужно подсчитать количество строк в коде, обернутом в <pre><code></code></pre> теги, для применения визуального оформления кода.
Подсчет сделал через split('\n');. IE отображает строки нормально, как и другие браузеры, но количество строк выдает (через alert) в 2 с лишним раза меньше. Можно ли как-то его научить этого осла нормально считать строки в теге pre?

ваый 26.08.2011 13:21

Код в студию. Интересует, как ты получаешь содержимое, которое затем разбиваешь через split.

artnik 26.08.2011 14:20

Вобщем кода много, но идея простая. Сначала вытаскивается html, потом я его разчленяю на строки через сплит, и циклом оборачиваю каждую строку в <li></li>. После чего старый pre удаляеться а на его место ставиться уже новый.
PS: Это jQuery

$('pre.code').each(function(index) {
	var html = $(this).find('code').html(),
		htmlArr = html.split('\n'),
		totalLines = htmlArr.length;

	$(this).after(
       '<div class="precode">'+
         '<pre>'+
           '<ol></ol>'+
         '</pre>'+
       '</div>'
	);
	
	var wrap = $(this).next('.precode');
	$(this).remove();
	
	var result = '',i;
	for(i = 0; i < totalLines; i++) {
		var curHTML = htmlArr[i],
			id = 'code'+(index+1)+'_l'+(i+1);
		curHTML = curHTML == false ? ' empty">' : '">'+curHTML;
		result += '<li id="'+id+'" rel="#'+id+'"><span class="l'+curHTML+'</span></li>';
	}
	wrap.find('ol').html(result);
});


На всяки случай цепляю и html код pre тега (внутри pre - код для теста)

<pre class="code"><code>function oversky_dynamic_vars($vars) {
    $vars[] = 'dynamic';
    return $vars;
}
add_filter('query_vars','oversky_dynamic_vars');

function oversky_dynamic_check() {
	$curVar = get_query_var('dynamic');
	if($curVar == 'css') {
		header("Content-Type: text/css");
		require (FUNCTIONS.'/dinamic-css.php');
		die;
	}
	if($curVar == 'js') {
		header('Content-type: text/javascript');
		require (FUNCTIONS.'/dinamic-js.php');
		die;
	}
}
add_action('template_redirect', 'oversky_dynamic_check');</code></pre>

ваый 26.08.2011 15:00

Проблема в том, что IE не учитывает всех переносов строк \n в блоках, считает их не важными, как и просто пробелы. Поэтому часть их он просто напросто вырезает. Исключение составляют элементы pre и textarea, в которых он все сохраняет в точности. Таким образом, в твоем случае тебе надо убрать элемент code, чтобы все работало.
var html = $(this).html(), ...

artnik 26.08.2011 15:10

Аха, точняк. Все намного легче чем я думал. Ато я тут уже на php начал мутить подсчет строк. Спасибо ваый!


Часовой пояс GMT +3, время: 17:30.