javascript - 除了第一行之外,有没有办法用 div 包裹内部文本?

标签 javascript jquery html css

我正在尝试自动化一些 HTML 以使用 jQuery Accordion 脚本。有很多页面都包含此 HTML,因此如果可能的话,如果可以仅使用一个类对其进行格式化,那就太棒了。这是我希望做的事情:

启动 HTML:

<ul class="accordionize">
<li>
   <h3>Heading numero uno</h3>
   <p>Street art fanny pack viral drinking vinegar food truck, jean shorts cray pop-up flexitarian selvage. Asymmetrical cardigan craft beer lo-fi normcore. Plaid gentrify synth four loko.</p>
   <p>Cred keytar gluten-free, artisan 8-bit viral ethnic asymmetrical messenger bag. Ennui occupy next level, direct trade ethical authentic drinking vinegar. Locavore salvia kitsch, try-hard butcher distillery cred ugh fanny pack ethnic.</p>
   <ul>
   <li>
      <h4>Another subheading</h4>
      <p>Pinterest post-ironic before they sold out, Pitchfork Intelligentsia crucifix art party American Apparel mustache YOLO chia umami Brooklyn 8-bit.</p>
   </li>
   <li>
      <h4>Second subheading</h4>
      <p>Roof party raw denim kale chips banjo trust fund Intelligentsia locavore Blue Bottle. Echo Park selfies Tonx Pinterest, crucifix mumblecore bicycle rights YOLO.</p>
   </li>
   </ul>
</li>
</ul>

我想添加一个 jQuery 脚本来定位 .accordionize 并将 HTML 转换为以下内容:

理想的 HTML 效果:(目标)

<ul class="accordionize">
<li>
   <h3 class="accordion-trigger">Heading numero uno</h3>
   <div class="accordion-content">
   <p>Street art fanny pack viral drinking vinegar food truck, jean shorts cray pop-up flexitarian selvage. Asymmetrical cardigan craft beer lo-fi normcore. Plaid gentrify synth four loko.</p>
   <p>Cred keytar gluten-free, artisan 8-bit viral ethnic asymmetrical messenger bag. Ennui occupy next level, direct trade ethical authentic drinking vinegar. Locavore salvia kitsch, try-hard butcher distillery cred ugh fanny pack ethnic.</p>
   <ul>
   <li>
      <h4 class="accordion-trigger">Another subheading</h4>
      <div class="accordion-content">
      <p>Pinterest post-ironic before they sold out, Pitchfork Intelligentsia crucifix art party American Apparel mustache YOLO chia umami Brooklyn 8-bit.</p>
      </div>
   </li>
   <li>
      <h4 class="accordion-trigger">Second subheading</h4>
      <div class="accordion-content">
      <p>Roof party raw denim kale chips banjo trust fund Intelligentsia locavore Blue Bottle. Echo Park selfies Tonx Pinterest, crucifix mumblecore bicycle rights YOLO.</p>
      </div>
   </li>
   </ul>
   </div>
</li>
</ul>

我可以让它的一部分与以下脚本一起使用,但第一个 header 需要位于 .accordion-content 之外。另外,我想要一种更简洁的方法来仅定位 li 中的第一个元素,无论它是 h3 还是 h4。谢谢,感谢任何想法!

<script>
$(function() {
   $('.accordionize li').wrapInner('<div class="accordion-content"></div>');
   $('.accordionize li h3').first().addClass('accordion-trigger');
   $('.accordionize li h4').first().addClass('accordion-trigger');
});
</script>

当前生成的 HTML:(不正确)

<ul class="accordionize">
<li>
   <div class="accordion-content">
   <h3 class="accordion-trigger">Heading numero uno</h3>
   <p>Street art fanny pack viral drinking vinegar food truck, jean shorts cray pop-up flexitarian selvage. Asymmetrical cardigan craft beer lo-fi normcore. Plaid gentrify synth four loko.</p>
   <p>Cred keytar gluten-free, artisan 8-bit viral ethnic asymmetrical messenger bag. Ennui occupy next level, direct trade ethical authentic drinking vinegar. Locavore salvia kitsch, try-hard butcher distillery cred ugh fanny pack ethnic.</p>
   <ul>
   <li>
      <div class="accordion-content">
      <h4 class="accordion-trigger">Another subheading</h4>
      <p>Pinterest post-ironic before they sold out, Pitchfork Intelligentsia crucifix art party American Apparel mustache YOLO chia umami Brooklyn 8-bit.</p>
      </div>
   </li>
   <li>
      <div class="accordion-content">
      <h4 class="accordion-trigger">Second subheading</h4>
      <p>Roof party raw denim kale chips banjo trust fund Intelligentsia locavore Blue Bottle. Echo Park selfies Tonx Pinterest, crucifix mumblecore bicycle rights YOLO.</p>
      </div>
   </li>
   </ul>
   </div>
</li>
</ul>

最佳答案

更新:

这个元素并不挑剔 li 中的第一个元素(而且它更漂亮)

<script>
$(function() {
    $('.accordionize li').wrapInner('<div class="accordion-content"></div>');
    $('.accordionize li div').children(":first-child").addClass('accordion-trigger').each(function() {
        $(this).prependTo($(this).parent().parent());
    });
});
</script>


上一个答案:

不完全是实现它的最干净的方法,但这会起作用:

<script>
$(function() {
    $('.accordionize li').wrapInner('<div class="accordion-content"></div>');
    $('.accordionize li h3').first().addClass('accordion-trigger');
    $('.accordionize li h4').first().addClass('accordion-trigger');
    $('.accordionize li h3').each(function(){
        $(this).prependTo($(this).parent().parent());
    });

    $('.accordionize li h4').each(function(){
        $(this).prependTo($(this).parent().parent());
    });
});
</script>

关于javascript - 除了第一行之外,有没有办法用 div 包裹内部文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23619266/

相关文章:

javascript - 为什么 uploadcare 每 N 毫秒重绘 html 标签?

javascript - WebSocket URL 变量未定义

javascript - 无法在 CLI 上运行 babel 命令

javascript - slider 问题 - 最后一张幻灯片上的奇怪重置

jQuery:让例子平滑向下滑动

javascript - 更改 JavaScript 中的日期格式

jquery - 使用 twitter bootstrap 在小屏幕上垂直重新排序 div

php - Jquery 检查元素是否存在以及条件是否存在

html - 如何制作带有居中 Logo 的导航栏

html - 为什么除 Chrome 之外的所有浏览器中这些 div 之间仍然有空白?