2011-12-28 4 views
1

Учитывая следующий код, который работает:наиболее эффективный способ сохранения ведущих заготовок продукции Sprintf

for (i=0; i<nLinears; i++) { 
    for (j=0; j<nLinearPts[i]-1; j++) { 
     $wb.upLinearLoad.append('<div>' + sprintf("%5s%8.1f to%7.1f%8.1f" 
     ,sLinearSegName[i][j],fLinearPtBA[i][j],fLinearPtBA[i][j+1],fLen) 
     .replace(/ /g,"&nbsp;")); 
    } 
} 

Это гарантирует, что как числа изменяются от малых (более ведущих пробелов) на больших (меньшее число ведущих пробелов), расстояние между столбцами будет поддерживаться. Однако, как я понимаю, использование регулярного выражения для .replace неэффективно, и поскольку у меня такая структура во всем приложении, мне нужно, чтобы она выполнялась как можно быстрее.

Я считаю, что jQuery .text() позаботится о моей потребности, но мне также нужно получить результат .append() .text(), и я не могу понять, как заставить их работать вместе.

Любые предложения будут очень благодарны.

+0

Вы можете обновить функцию 'sprintf()', чтобы в первую очередь выводить неразрывные пробелы. Но вы действительно нашли проблему с использованием regex '.replace()'? Я не думаю, что у вас будет проблема. Учитывая, что у вас есть табличные данные, почему бы вам не использовать '

'? (Кстати, я думаю, что вам не хватает закрывающей круглой скобки перед точкой с запятой.) – nnnnnn

+0

Спасибо, что поймал пропавший парен. Я урезал фактическое гораздо более длинное заявление с целью задать вопрос и случайно достал необходимый парн. Я использую таблицы в других местах, чтобы позаботиться о проблеме, но я слышал, что они тоже несут высокие накладные расходы. Тем не менее, я вовсе не уверен, что таблицы или регулярное выражение - настоящая проблема с производительностью. Позже я, вероятно, попробую несколько вещей, чтобы ускорить его, но на данный момент я пытаюсь это сделать и лишь случайно стараюсь не спешить с ним. Я думаю, что я быстро взгляну на код sprintf. Спасибо за комментарий. – Terry

+0

Я посмотрел на sprintf() и обнаружил, что простое однозаказательное изменение на замену « » для ввода символа колодки достало мне то, что мне было нужно. – Terry

ответ

0

Вы можете обновить функцию sprintf(), чтобы в первую очередь выводить неразрывные пробелы.

Но вы действительно нашли проблему с использованием регулярного выражения .replace()? Я не думаю, что у вас будет проблема. Учитывая, что у вас есть табличные данные, почему бы вам не использовать <table>? Для этого нужны таблицы.

0

Вы можете использовать put these in <pre> elements вместо замены строки &nbsp;.

Это будет (обычно) форматировать их шрифтом фиксированной ширины и сохранять пробелы без дополнительной работы. <pre> предназначен для предварительно отформатированного текста, что имеет смысл для того, что у вас здесь.

Если это не работает идеально, и вам нужны альтернативы, вы можете check out this question about how to use pre-formatted text in different contexts.

0

Я смотрел на Sprintf() и обнаружил, что простое изменение один-оператора произвело то, что мне было нужно:

pad_character = '&nbsp;'; 

Моей благодарность автора осуществления Sprintf() для использования значимых имен переменных.

Смежные вопросы