2013-05-30 3 views
4

У меня есть поле textarea и каждое нажатие клавиши, я хотел бы нажать последнюю строку в textarea на массив.Получить последнюю строку из текстового поля на клавиатуре

В настоящее время я строю массив на каждом нажатии клавиши, чтобы получить последнюю строку в текстовом поле. Есть ли способ оптимизировать это? Смысл, получить последнюю строку в текстовом поле, не создавая массив.

jQuery('#mytextarea').keypress(function() { 
    lines = jQuery('#mytextarea').text().split("\n"); 
    lastLine = lines[lines.length - 1]; 

});

if(.. some condition ..) { 
myArray.push(lastLine); 
+0

почему ты пользуешься 'jQuery' вместо' '$? просто любопытно. – PlantTheIdea

+0

Просто личное предпочтение. –

+2

Зачем вам это нужно оптимизировать? Это займет nano секунду для выполнения и не будет выполняться на вашем сервере. – Deepsy

ответ

9

Действительно, есть способ оптимизировать это. Оптимизация в основном - использование памяти - также улучшено использование центрального процессора.

Оптимизированная версия основана на lastIndexOf(). Она заключается в следующем:

jQuery("#mytextarea").keypress(function() { 
    var content = this.value; 
    var lastLine = content.substr(content.lastIndexOf("\n")+1); 
}); 

Вы заметите пару микро-оптимизации:

  • this уже является элементом DOM. Существует немного смысла в повторном вызове jQuery только для получения текстового содержимого. Сохраняет немного на процессоре
  • с помощью lastIndexOf позволяет мне получить что-либо после того, как последний \n

Dogbert стал эталоном для lastIndexOf: http://jsperf.com/splitting-large-strings

+0

Не забывайте, что вы используете фактический javascript вместо jQuery, чтобы получить текст, который всегда быстрее: D – PlantTheIdea

+0

@PlantTheIdea: уже упоминалось: первая пуля. –

+0

Я не думаю, что использование процессора будет одинаковым в обоих подходах; ваш должен быть быстрее. Ожидание вашего теста. :) – Dogbert

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