Чистый Вставленный текст Microsoft Word с помощью JavaScript

Когда вы делаете что-то подобное в своей конфигурации Spring XML

<bean id="fooClassInstance" class="my.package.FooClass">
    <property name="myproperty" value="${variable}" />
</bean>

Spring использует PropertyPlaceholderConfigurer для поиска этих переменных в переменных System / enviroment и / или в списке предопределенных файлов свойств.

Таким образом, самый простой способ - передать это значение как переменную системы или среды с помощью -Dvariable=value.

Если вы хотите передать эти значения в качестве аргументов в min, вы все равно можете делать такие хаки, как

public static void main(String[] args) {
    // parse arguments into key, value pairs
    System.setProperty(<key>, <value>);
    ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(<your XML config file>);
    // use Spring context to get beans
}
24
задан Todd Main 31 July 2010 в 18:45
поделиться

8 ответов

Вот функция, которую я закончил писать, которая делает работу довольно хорошо (насколько я могу судить в любом случае).

Я, безусловно, открыт для предложений по улучшению, если они у кого-то есть. Спасибо.

function cleanWordPaste( in_word_text ) {
 var tmp = document.createElement("DIV");
 tmp.innerHTML = in_word_text;
 var newString = tmp.textContent||tmp.innerText;
 // this next piece converts line breaks into break tags
 // and removes the seemingly endless crap code
 newString  = newString.replace(/\n\n/g, "<br />").replace(/.*<!--.*-->/g,"");
 // this next piece removes any break tags (up to 10) at beginning
 for ( i=0; i<10; i++ ) {
  if ( newString.substr(0,6)=="<br />" ) { 
   newString = newString.replace("<br />", ""); 
  }
 }
 return newString;
}

Надеюсь, это поможет некоторым из вас.

22
ответ дан 29 November 2019 в 00:13
поделиться

Я использую это:

$(body_doc).find('body').bind('paste',function(e){
                var rte = $(this);
                _activeRTEData = $(rte).html();
                beginLen = $.trim($(rte).html()).length; 

                setTimeout(function(){
                    var text = $(rte).html();
                    var newLen = $.trim(text).length;

                    //identify the first char that changed to determine caret location
                    caret = 0;

                    for(i=0;i < newLen; i++){
                        if(_activeRTEData[i] != text[i]){
                            caret = i-1;
                            break;  
                        }
                    }

                    var origText = text.slice(0,caret);
                    var newText = text.slice(caret, newLen - beginLen + caret + 4);
                    var tailText = text.slice(newLen - beginLen + caret + 4, newLen);

                    var newText = newText.replace(/(.*(?:endif-->))|([ ]?<[^>]*>[ ]?)|(&nbsp;)|([^}]*})/g,'');

                    newText = newText.replace(/[·]/g,'');

                    $(rte).html(origText + newText + tailText);
                    $(rte).contents().last().focus();
                },100);
            });

body_doc - это редактируемый iframe. Если вы используете редактируемый div, вы можете удалить часть .find ('body'). В основном он обнаруживает событие вставки, проверяет местоположение, очищает новый текст и затем помещает очищенный текст туда, где он был вставлен. (Звучит сбивающе с толку ... но на самом деле это не так плохо, как кажется.

setTimeout необходим, потому что вы не можете захватить текст, пока он фактически не вставлен в элемент, вставка событий запускается, как только начинается паста.

3
ответ дан 29 November 2019 в 00:13
поделиться

Я сделал что-то подобное очень давно, когда полностью очистил содержимое в текстовом редакторе и преобразовал теги шрифтов в стили, brs в p и т. Д., Чтобы обеспечить его согласованность между браузерами и предотвратить попадание определенных некрасивых вещей. через пасту. Я взял свою рекурсивную функцию и извлек большую часть из нее, за исключением основной логики, это может быть хорошей отправной точкой («результат» - это объект, который накапливает результат, который, вероятно, занимает второй проход для преобразования в строку), если это то, что вам нужно:

var cleanDom = function(result, n) {
var nn = n.nodeName;
if(nn=="#text") {
    var text = n.nodeValue;

    }
else {
    if(nn=="A" && n.href)
        ...;
    else if(nn=="IMG" & n.src) {
        ....
        }
    else if(nn=="DIV") {
        if(n.className=="indent")
            ...
        }
    else if(nn=="FONT") {
        }       
    else if(nn=="BR") {
        }

    if(!UNSUPPORTED_ELEMENTS[nn]) {
        if(n.childNodes.length > 0)
            for(var i=0; i<n.childNodes.length; i++) 
                cleanDom(result, n.childNodes[i]);
        }
    }
}
0
ответ дан 29 November 2019 в 00:13
поделиться

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

$(document).ready(function(){

  $(".section-overview textarea").bind({
    paste : function(){
    setTimeout(function(){
      //textarea
      var text = $(".section-overview textarea").val();
      // look for any "\n" occurences and replace them
      var newString = text.replace(/\n/g, '');
      // print new string
      $(".section-overview textarea").val(newString);
    },100);
    }
  });
  
});
0
ответ дан 29 November 2019 в 00:13
поделиться

Ненавижу это говорить, но в конце концов я перестал заставлять TinyMCE обрабатывать дерьмо Word так, как я хочу. Теперь мне просто отправляется электронное письмо каждый раз, когда пользовательский ввод содержит определенный HTML (например, ищите ), и я исправляю его вручную.

-4
ответ дан 29 November 2019 в 00:13
поделиться

Вы можете использовать полный CKEditor , который очищает при вставке, либо просмотреть исходный код .

3
ответ дан 29 November 2019 в 00:13
поделиться

Можете ли вы вставить в скрытое текстовое поле, скопировать из того же текстового поля и вставить в целевое?

-1
ответ дан 29 November 2019 в 00:13
поделиться

Как насчет кнопки «Вставить как обычный текст», которая отображает