javascript 获取未知innerHTML的子字符串而不创建孤立标记?

svmlkihl  于 2022-12-17  发布在  Java
关注(0)|答案(1)|浏览(85)

我正在创建一个显示更多/更少的传记功能,需要创建一个截断预览版本,而不打破HTML。

**条件:**biography元素的innerHTML可能包含div、paragraph、span或根本没有HTML。标记也可能具有内联样式。传统的str.substring(0, 400)如果碰巧拆分了任何类型的开始和结束标记,就会破坏页面。

避免孤立标记的最佳方法是什么?

const elm = document.getElementById("bio");
let fullHtml = elm.innerHTML;
let prevHtml;
prevHtml = fullHtml.substr(0, 450);
prevHtml = prevHtml.substr(0, Math.min(prevHtml.length, prevHtml.lastIndexOf(" "))); // truncates at last space to prevent mid-word truncation

// how do I make sure prevHtml doesn't have create orphaned tags?
3npbholx

3npbholx1#

您可以显示和隐藏内容,而不是删除内容和破坏HTML。这里有一个浮动div的布局,它有一个固定的高度50px和一个按钮来切换全文的打开和关闭。(有一个z索引的问题,我不知道如何解决,如果你知道如何解决,请帮助解决它。)

$('document').ready(function() {
  $('.bioWrapper button').click(function() {
    let isOpen = $(this).data('open');
    if(isOpen) {
      $('.bioWrapper').css({opacity: 1});
      $(this).text('⯆').closest('.bioWrapper').css({overflow: 'hidden'}).removeClass('clearFix');
    } else {
      $('.bioWrapper').css({opacity: 0.2});
      $(this).text('⯅').closest('.bioWrapper').css({overflow: 'visible', opacity: 1}).addClass('clearFix');
    }
    $(this).data('open', !isOpen);
  });
});
#container {
  width: 460px;
}
.bioWrapper {
  float: left;
  overflow: hidden;
  width: 200px;
  height: 50px;
  margin: 3px 3px;
}
.bioContent {
  border: 1px solid gray;
  padding: 3px 10px;
  background-color: white;
}
.bioContent:hover {
  border-color: black;
}
.toggleButton {
  float: right;
}
.clearFix:before,
.clearFix:after {
  content: ".";
  display: block;
  height: 0;
  overflow: hidden;
}
.clearFix:after { clear: both; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">
  <div class="bioWrapper">
    <div class="toggleButton"><button>⯆</button></div>
    <div class="bioContent">
      <b>Amber Arms</b>
      <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
    </div>
  </div>
  <div class="bioWrapper">
    <div class="toggleButton"><button>⯆</button></div>
    <div class="bioContent">
      <b>Berta Bush</b>
      <div> Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div>
    </div>
  </div>
  <div class="bioWrapper">
    <div class="toggleButton"><button>⯆</button></div>
    <div class="bioContent">
      <b>Charles Chaney</b>
      <div>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.</div>
    </div>
  </div>
  <div class="bioWrapper">
    <div class="toggleButton"><button>⯆</button></div>
    <div class="bioContent">
      <b>Dora Derham</b>
      <div>Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.</div>
    </div>
  </div>
</div>

相关问题