jquery 如何找到元素的首字母并在::before中使用

rjzwgtxy  于 2024-01-07  发布在  jQuery
关注(0)|答案(2)|浏览(142)

我得到了以下设置:

  1. (function($) {
  2. var text = $(".panel .panel-title a span").text();
  3. var first_letter = text.charAt(0);
  4. $(".panel-heading").attr('data-before', first_letter);
  5. })(jQuery);
  1. .panel-heading:before {
  2. content: attr(data-before);
  3. left: -25px;
  4. top: 6px;
  5. display: inline-block;
  6. position: absolute;
  7. height: 45px;
  8. width: 47px;
  9. z-index: 9999;
  10. }
  1. <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  2. <div class="panel">
  3. <div class="panel-heading">
  4. <p class="panel-title">
  5. <a href="#aa1">
  6. <span>Piece rate work</span>
  7. </a>
  8. </p>
  9. </div>
  10. </div>
  11. <div class="panel">
  12. <div class="panel-heading">
  13. <p class="panel-title">
  14. <a href="#aa1">
  15. <span>Another Letter Here</span>
  16. </a>
  17. </p>
  18. </div>
  19. </div>
  20. <div class="panel">
  21. <div class="panel-heading">
  22. <p class="panel-title">
  23. <a href="#aa1">
  24. <span>More Letters Here</span>
  25. </a>
  26. </p>
  27. </div>

我想做的是在span元素中找到内容的第一个字母,在本例中是字母P。然后将这个字母转换为.panel-heading::before伪元素的内容。
有几个.panel div与第一个.panel div有相同的兄弟元素。每个元素中的span元素包含不同的文本,因此第一个字母不同。所以它应该总是获取相关的(第一个)字母并将其放置在::before内容中。
在@Michele De Falco的帮助下,我设法获取了第一个字母并将其放入伪内容中。但它总是获取第一个.panel div的第一个字母并将其放在任何地方。

nzkunb0c

nzkunb0c1#

我已经更新了你的jQuery使用each(),所以正确的父.panel-heading得到正确的data-before属性:

  1. (function($) {
  2. // For each .panel
  3. $('.panel').each(function() {
  4. // use let instead of var for scoping
  5. let text = $(this).find('a span').text();
  6. // make sure the span element exists.
  7. if (text) {
  8. // Get the first letter
  9. let first_letter = text.charAt(0);
  10. // use the original parent $(this) to set the the data-att to the correct child.
  11. $(this).find('.panel-heading').attr('data-before', first_letter);
  12. }
  13. });
  14. })(jQuery);
  1. .panel-heading:before {
  2. content: attr(data-before);
  3. left: -25px;
  4. top: 6px;
  5. display: inline-block;
  6. position: absolute;
  7. height: 45px;
  8. width: 47px;
  9. z-index: 9999;
  10. }
  11. /* TESTING ONLY */
  12. .panel {
  13. position: relative;
  14. left: 25px;
  15. }
  1. <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  2. <div class="panel">
  3. <div class="panel-heading">
  4. <p class="panel-title">
  5. <a href="#aa1">
  6. <span>Piece rate work</span>
  7. </a>
  8. </p>
  9. </div>
  10. </div>
  11. <div class="panel">
  12. <div class="panel-heading">
  13. <p class="panel-title">
  14. <a href="#aa1">
  15. <span>Another Letter Here</span>
  16. </a>
  17. </p>
  18. </div>
  19. </div>
  20. <div class="panel">
  21. <div class="panel-heading">
  22. <p class="panel-title">
  23. <a href="#aa1">
  24. <span>More Letters Here</span>
  25. </a>
  26. </p>
  27. </div>
展开查看全部
zsohkypk

zsohkypk2#

下面是jquery的示例,使用text()函数获取span标签的文本,然后使用charAt()函数获取第一个字符,最后我使用before()函数引用span.before标签

  1. $(document).ready(function(){
  2. var text = $('span.text').text();
  3. var first_letter = text.charAt(0)
  4. $( ".panel-heading > span.before" ).before( first_letter )
  5. });

个字符

相关问题