jquery
2013-09-11 1 views 2 likes 
2

Вопрос звучит долго, но я ищу реальное простое базовое решение.Добавляет HTML в текстовую область, сохраняя существующее содержимое текстовой области и добавляя туда, где находится курсор?

HTML:

<textarea id="test">Hello world</textarea> 

        <a>change</a> 

JQuery:

$('a').click(function() { 

     var htmlString = '<div class="football"></div>' 
     var existing = jQuery('#test').text() 

     $('#test').append().text(existing + htmlString).html(); 

    }); 

Это добавляет существующий текст с моей htmlString переменной, для одного это, как я должен добавить htmlString в текстовом области, сохраняя при этом существующий контент, или есть лучший способ?

Также важно, чтобы я добавил htmlString, где находится курсор, это имеет смысл в моем живом коде, но вы должны понять, что этот вид разбивает мой код выше, строгая обе эти переменные. Так что я открыт для некоторых идей :)

Вот скрипка для вас, чтобы получить лучший визуальные о том, что этот код делает FIDDLE

+0

Это выглядит как хорошее для чтения HTTP://stackoverflow.com/questions/946534/insert-text-into-textarea-with-jquery/946556#946556 Я по-прежнему открыт для отзывов здесь и ответов, конечно ... –

+1

Я предлагаю использовать .val() вместо html() при работе с элементами формы ... Также это то, что вы ищете http://stackoverflow.com/questions/263743/how-to-get-caret-position-in-textarea – Salketer

+0

Спасибо, я благодарен за ответ, смотря сейчас ... да, я обновил скрипку. Http://jsfiddle.net/nQErc/233/ –

ответ

3

Updated Demo

(function ($) { 
    $.fn.getCursorPosition = function() { 
     var input = this.get(0); 
     if (!input) return; // No (input) element found 
     if ('selectionStart' in input) { 
      // Standard-compliant browsers 
      return input.selectionStart; 
     } else if (document.selection) { 
      // IE 
      input.focus(); 
      var sel = document.selection.createRange(); 
      var selLen = document.selection.createRange().text.length; 
      sel.moveStart('character', -input.value.length); 
      return sel.text.length - selLen; 
     } 
    } 
})(jQuery); 

$('a').click(function() { 
    var htmlString = '<div class="football"></div>'; 
    var txt = $('#test').text(); 
    var cur_pos = $('#test').getCursorPosition(); 
    if (cur_pos != 0) { 
     $('#test').val(txt.substring(0, cur_pos) + htmlString + txt.substring(cur_pos + 1)); 
    }else{ 
     $('#test').val(htmlString + txt); 
    } 
}); 
+1

Святые кусы, бэтмен, это здорово ... просто быстро посмотрел на скрипку, и это выглядит правильно на деньги, рад, что ты наткнулся на мой вопрос .. Я просто искал selectionStart и примеры для него. Похоже, я получил отличный пример здесь :) –

+0

Является ли это совместимым с IE, я читаю selectStart не работает с IE, я тестирую его сам здесь в minuet, если нет, все в порядке, есть обходной путь в этом сообщении, который я читаю:) –

+0

@MichaelJosephAubry приветствую Happy to help :) –

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