当现有元素只有类,没有ID时,jQuery / Javascript将唯一元素添加到其他元素

时间:2019-05-10 22:46:40

标签: javascript jquery class element title

Wordpress主题允许站点管理员创建包含每个字段“描述”的表单。这些描述没有唯一的ID,只有一个通用类:“描述”。他们看起来像这样:

<div class="field-head"><label for="name">Your name</label><small class="description">A unique description for this field.</small></div>

我没有像主题那样在每个字段标签上内联显示这些描述,而是使用CSS(display:none;)隐藏了描述类,并尝试创建一个以描述为'title'属性的跨度,因此jQuery会将其显示为悬停工具提示。

这就是我想要的:

<div class="field-head"><label for="name">Your name</label><span class="tipwrapper" title='A unique description for this field.'>Hover for a tip</span><small class="description">A unique description for this field.</small></div>

我已经成功地使用CSS隐藏了description字段,并尝试了各种方法在'description'类的元素之前或之后添加跨度。预期最终将遍历所有这些元素,因此我首先尝试仅使用一个字段(第二个使用description类)来成功。这是我进行过多次尝试及其结果的两个示例:< / p>

示例尝试1:

  jQuery(document).ready(function($){
if (jQuery(('.field-head')[1]) ){
  var tiptext = $('.field-head .description')[1].innerHTML;
  var txt1 = '<span class="tipwrapper">'+tiptext+'</span>';
  $('.field-head .description')[1].before(txt1); 
};
});

结果:这会将HTML放置在正确的位置,但不会呈现,而只会显示为内联文本,如下所示:

<span class="tipwrapper">A unique description for this field.</span>

尝试#2的示例:

(我尝试先创建工具提示的范围,然后设置其标题):

jQuery(document).ready(function($){
  var txt1 = "<span class='tipwrapper' title=''>Hover for a tip</span>";                   
  $('.field-head .description').before(txt1);
  });
jQuery(document).ready(function($){
     if (jQuery(('.field-head')[1]) ){
var classLength = $('.field-head .description').length;
   var tiptext = $('.field-head .description')[1].innerHTML;
   $(('.field-head .tipwrapper')[1]).attr('title', tiptext);
        };
 });

结果:这会正确地将工具提示跨度显示在带有描述类的每个元素之前,但是我尝试设置它的title属性仍然为空(即使向该属性添加了alert(tiptext)上面的函数确认变量正确获取了描述文本。结果HTML就是这样。

<div class="field-head"><label for="name">Your name</label><span class="tooltip" title=''>Hover for a tip</span><small class="description">A unique description for this field.</small></div>

如何将元素中的html设置为新元素之前的'title'属性?

1 个答案:

答案 0 :(得分:1)

这是一个使用.replaceWith()来用新的small替换原始span元素的解决方案。

.each()循环用于迭代所有.field-head元素。

查看代码中的注释。

$(".field-head").each(function() {

  // Get the small element in each field-head and get its text
  var small = $(this).find("small")
  var description = small.text();

  // create a span element...
  var span = $("<span>").addClass("tipwrapper").text("Hover for a tip");
  // And set the title.
  span.attr("title", description);

  // Replace the small with the new span
  small.replaceWith(span);

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="field-head"><label for="name">Your name</label><small class="description">A unique description for this field.</small></div>