代码之家  ›  专栏  ›  技术社区  ›  DanMad

在特定字符处断字

  •  3
  • DanMad  · 技术社区  · 6 年前

    我知道有人问过类似的问题,但没有一个是这样的。

    我有一个使用BEM来显示 code 标签。下面是一个例子:

    enter image description here

    显然,默认行为是在连字符处打断单词,正如我们在示例中看到的那样。有没有办法控制换行符出现在哪个字符上?我想能够保持类名的完整性,以便在每个句点之前发生换行 . 如有必要。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Udara Kasun    6 年前

    $('.mypara').each(function () {
         var str = $(this).html();  
          var htmlfoo = str.split('.').join('</br>');
         $(this).html(htmlfoo);
     });
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <code class="mypara">
    This is-the HTML if its - characters exceed 50. characters it should go-to next line
    </code>
    
    <code class="mypara">
    This is the HTM-if its. characters exceed 50 - characters it should. go-to next-line
    </code>
        2
  •  0
  •   jla    6 年前

    更新:在JS解决方案中删除句点前的空格。

    code 标记的内容,以禁用带连字符的单词的换行,并且您可以换行从中的句点开始的每个块 inline-block 跨度。

    下面的代码将每个 代码 display: inline-block; . 这将提供您正在寻找的行为,并在复制粘贴文本时保留所有内容。

    CSS格式:

    .no-wrap-hyphen {
        white-space: nowrap;
    }
    .wrap-period {
        display: inline-block;
    }
    

    function wrapPeriodsNotHyphens() { // run on window load or resize
        var codes = document.getElementsByTagName( "code" );
    
        for ( var i = 0; i < codes.length; i++ ) {
    
            currentCode = codes[ i ].innerHTML.split(/(?=[ .])/); // split by spaces and periods
    
            for ( var c = 0; c < currentCode.length; c++ ) {
                // surround each item with nowrap span
                currentCode[ c ] = '<span class="no-wrap-hyphen">' + currentCode[ c ] + '</span>';
                if ( currentCode[ c ].indexOf( '.' ) > -1 ) {
                    // add a zero size space at the start for periods
                    currentCode[ c ] = '<span class="wrap-period">' + currentCode[ c ] + '</span>';
                }
            }
    
            codes[ i ].innerHTML = currentCode.join('');
        }
    }