Codemirror로 버튼을 클릭 할 때 선택 / 강조 표시된 텍스트를 실행 취소하는 방법

ED 씨

부트 스트랩으로 작업중인 간단한 codemirror 텍스트 편집기가 있습니다. 굵은 체와 코드 버튼 확인을 클릭하면 선택 / 강조 표시된 텍스트가 올바르게 래핑됩니다.

질문 1 : 텍스트가 태그로 래핑 <b>something</b>되면 If I go and select / highlight it again and click same bold button in codemirror 어떻게 하면 되돌릴 수 있습니까?

다음의 CodePen 전체보기

다음의 Codepen 코드보기

스크립트

<script type="text/javascript">
$(document).ready(function() {

// tooltips on hover
$('[data-toggle=\'tooltip\']').tooltip({container: 'body', html: true});

// Makes tooltips work on ajax generated content
$(document).ajaxStop(function() {
    $('[data-toggle=\'tooltip\']').tooltip({container: 'body'});
});

$('[data-toggle=\'tooltip\']').on('remove', function() {
    $(this).tooltip('destroy');
});


var editor = document.getElementById('text-editor');

$("#text-editor").each(function (i) {

    editor = CodeMirror.fromTextArea(this, {
        lineNumbers: true,
        mode: 'html'

    });

    editor.on("change", function() {
        document.getElementById('question-preview').innerHTML = editor.getValue('<br>')
        .replace('<?','&lt;?')
        .replace('?>', '?&gt;')
        .replace('<script>', '&lt;script&gt;')
        .replace('<script>', '&lt;/script&gt;')
        .replace('<div>', '&lt;div&gt;')
        .replace('</div>', '&lt;/div&gt;')

    });

    //$('#hr').append('<hr />');

    $('a[role="button"]').click(function(){

        var val = $(this).data('val');
        var string = editor.getSelection();

        switch(val){

            case 'bold': 
                editor.replaceSelection('<b>' + string + '</b>');
            break;

            case 'italic': 
                editor.replaceSelection('<i>' + string + '</i>');
            break;

            case 'quote': 
                editor.replaceSelection('<blockquote><p>' + string + '</p></blockquote>');
            break;

            case 'code': 
                editor.replaceSelection('<pre><code>' + string + '</code></pre>');

            break;

            case 'hr': 
                editor.replaceSelection('<hr/>');

            break;
        }

    });

    $(".dropdown-menu li a[class='btn-heading']").click(function(){
        var val = $(this).data('val');
        var string = editor.getSelection();

        switch(val){
            case 'h1': 
                editor.replaceSelection('<h1>' + string + '</h1>');
            break;
            case 'h2': 
                editor.replaceSelection('<h2>' + string + '</h2>');
            break;
            case 'h3': 
                editor.replaceSelection('<h3>' + string + '</h3>');
            break;
            case 'h4': 
                editor.replaceSelection('<h4>' + string + '</h4>');
            break;
            case 'h5': 
                editor.replaceSelection('<h5>' + string + '</h5>');
            break;
            case 'h6': 
                editor.replaceSelection('<h6>' + string + '</h6>');
            break;
        }
    });
});

});

</script>

HTML

<div class="container">

<div class="row">

<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="panel panel-default"  onLoad="text_editor();">
<div class="panel-heading">

<ul class="nav nav-pills" id="heading">
    <li><a role="button" data-val="bold">Bold</a></li>
    <li><a role="button" data-val="italic">Italic</a></li>
    <li><a role="button" data-val="link">Hyperlink</a></li>
    <li><a role="button" data-val="quote">Quote</a></li>
    <li><a role="button" data-val="code">Code</a></li>
    <li><a role="button" data-val="image">Image</a></li>
    <li class="dropdown">
        <a class="dropdown-toggle" aria-expanded="false" aria-haspopup="true" role="button" data-toggle="dropdown">Heading <span class="caret"></span></a>
        <ul class="dropdown-menu"> 
            <li><a class="btn-heading" data-val="h1">H1</a></li> 
            <li><a class="btn-heading" data-val="h2">H2</a></li> 
            <li><a class="btn-heading" data-val="h3">H3</a></li> 
            <li><a class="btn-heading" data-val="h4">H4</a></li>
            <li><a class="btn-heading" data-val="h5">H5</a></li> 
            <li><a class="btn-heading" data-val="h6">H6</a></li>
        </ul>
    </li>
</ul>

</div>
<div class="panel-body">
<textarea id="text-editor" name="text-editor" class="form-control"></textarea>
</div>
</div>
</div>

</div>

<div class="row">

<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div id="question-preview"></div>
</div>

</div>

</div>
dingo_d

나는 이것을 시도했고 효과가 있었다.

    $('a[role="button"]').click(function(){

        var val = $(this).data('val');
        var string = editor.getSelection();

        switch(val){

            case 'bold':
              if(string.indexOf('<b>') > -1){
                editor.replaceSelection(string.replace('<b>', '').replace('</b>', ''));
              } else{
                editor.replaceSelection('<b>' + string + '</b>'); 
              }
            break;

            case 'italic': 
                editor.replaceSelection('<i>' + string + '</i>');
            break;

            case 'quote': 
                editor.replaceSelection('<blockquote><p>' + string + '</p></blockquote>');
            break;

            case 'code': 
                editor.replaceSelection('<pre><code>' + string + '</code></pre>');

            break;

            case 'hr': 
                editor.replaceSelection('<hr/>');

            break;
        }

    });

<b>태그 가 있는지 문자열을 확인하고 태그가 있으면 제거합니다.

CodePen 링크

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

VueJS - 클릭했을 때 선택한 버튼을 강조 표시하는 방법

JavaScript를 사용하여 클립 보드에 복사 할 때 강조 표시된 텍스트 선택을 제거하는 방법

참조로 옵션을 선택한 다른 테이블에 데이터를 표시하기 위해 버튼을 클릭 할 때 "MethodNotAllowedHttpException"을 수정하는 방법

다른 모든 버튼의 배경색을 재설정하고 클릭 할 때 선택한 버튼을 강조 표시하는 방법은 무엇입니까?

세그먼트 제어 버튼에서 세그먼트를 다시 클릭 할 때까지 영구적으로 선택 취소하는 방법

NEXT 버튼을 클릭할 때 현재 재생 중인 오디오를 강조 표시하는 방법

버튼을 클릭 할 때 PHP를 실행하는 방법?

HTML 버튼을 클릭할 때 저장 프로시저를 실행하는 방법은 무엇입니까?

버튼을 클릭 할 때 색상 선택기를 표시하는 방법은 무엇입니까?

클릭 할 때 행을 강조 표시하고 Excel의 모든 탭에 코드를 적용하는 방법

이미지를 클릭 할 때 각 탭을 강조 표시하는 방법

강조 표시된 드롭 다운을 기반으로 클래스가 변경 될 때 Selenium 웹 요소를 선택하는 방법

클릭 시 기능을 실행하는 Tkinter 텍스트, 커서를 가리킬 때 강조 표시

강조 표시된 항목을 클릭 할 때 JavaFX TableView에서 선택을 감지하는 방법은 무엇입니까?

버튼을 클릭 할 때 ListView에서 항목을 선택 취소하는 방법

취소 버튼을 클릭 할 때 다중 삭제를 방지하는 방법

Bootstrap에서 라디오 버튼을 클릭 할 때 텍스트를 표시하거나 숨기는 방법

Android에서 라디오 버튼을 클릭 할 때 편집 텍스트를 표시하는 방법

Android에서 라디오 버튼을 클릭 할 때 편집 텍스트를 표시하는 방법

WizardsPage1에서 2까지 다음으로 이동할 때 진행률 표시 줄 취소 버튼을 클릭하면 사용자가 동일한 페이지에 머물도록 강제하는 방법은 무엇입니까?

취소 버튼을 클릭 할 때 WPF 자식 창에서 변경된 데이터를 롤백하는 방법

Vaadin 14 Upload-사용자가 파일 선택 대화 상자에서 취소 버튼을 클릭 할 때 이벤트를 포착하는 방법

HTML 버튼을 클릭했을 때 다운로드를 실행하는 방법

GestureDetector를 클릭 할 때 색상을 강조하는 방법

버튼을 여러 번 클릭할 때 쉼표로 구분된 값을 표시하는 방법

Flutter : 버튼을 클릭할 때 텍스트를 업데이트하는 방법

Javascript / jQuery- 하나를 클릭 할 때 다른 모든 확인란을 선택 취소하는 방법

외부를 클릭하여 패널을 숨길 때 강조 표시된 p : autoComplete 항목을 강제로 선택합니다.

셀을 클릭하거나 선택할 때 매크로 실행

TOP 리스트

  1. 1

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  2. 2

    std :: regex의 일관성없는 동작

  3. 3

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  4. 4

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  5. 5

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  6. 6

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  7. 7

    Ionic 2 로더가 적시에 표시되지 않음

  8. 8

    Seaborn에서 축 제목 숨기기

  9. 9

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  10. 10

    복사 / 붙여 넣기 비활성화

  11. 11

    ArrayBufferLike의 typescript 정의의 깊은 의미

  12. 12

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  13. 13

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

  14. 14

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  15. 15

    PRNG 기간보다 순열이 더 많은 목록을 무작위로 섞는 방법은 무엇입니까?

  16. 16

    C # HttpWebRequest 기본 연결이 닫혔습니다. 전송시 예기치 않은 오류가 발생했습니다.

  17. 17

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  18. 18

    잘못된 구성 개체입니다. Webpack이 Angular의 API 스키마와 일치하지 않는 구성 개체를 사용하여 초기화되었습니다.

  19. 19

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  20. 20

    R의 마침표와 숫자 사이에 문자열 삽입

  21. 21

    Assets의 BitmapFactory.decodeStream이 Android 7에서 null을 반환합니다.

뜨겁다태그

보관