使用 div 元素的文本作为 jQuery 的占位符

Use div element's text as placeholder with jQuery

我有一个奇数problem/challenge。我使用的一个插件没有为他们的输入字段使用真正的占位符,而是使用输入字段下方的 div 元素,现在它来了,他们称之为占位符,非常奇怪。

所以我想用一些 jQuery 来操纵它,这对我来说是一个新的水平,所以我已经尝试了第一步。我希望看到 div 元素的文本被用作 input 的实际占位符。我显然可以用新属性调用每个输入并删除 div,但这使得每个 individual 输入有 20 行编码,我想要 1 个解决方案。所有输入字段有 2 个一致的 HTML 结构:

html

<div class="ps-form__field ">
    <input type="email" name="email" id="email" class="ps-input email" >
    <div class="ps-form__field-desc lbl-descript">email address</div>
</div>

<div class="ps-form__field">
    <div class="ps-form__field-inner">
        <input type="text" value="" id="profile_field_name" data-id="name" class="ps-input">
    </div>
    <div class="ps-form__field-desc lbl-descript">First name</div>
</div>

这是 class .ps-form__field-desc,我想将其视为 inputplaceholder

我的jQuery尝试

var txtph = jQuery('.ps-form__field-desc').parents().each().text();
if ( jQuery('.ps-form__field > div').length ) {
    jQuery('.ps-form__field > input').each().attr('placeholder', txtph);
    jQuery('.ps-form__field-desc').remove();
}

我知道上面可能有很多错误,但这对我来说是新的。

你可以使用这个:

$(document).ready(function() {
  $('.ps-form__field input').attr("placeholder",function() {
    return $(this).closest(".ps-form__field").find('.lbl-descript').text()
  });
  $('.lbl-descript').remove()
});

它将select每次输入并将placeholder属性设置为相应的.lbl-descript文本

工作演示

$(document).ready(function() {
  $('.ps-form__field input').attr("placeholder", function() {
    return $(this).closest(".ps-form__field").find('.lbl-descript').text()
  });
  $('.lbl-descript').remove()
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="ps-form__field ">
  <input type="email" name="email" id="email" class="ps-input email">
  <div class="ps-form__field-desc lbl-descript">email address</div>
</div>

<div class="ps-form__field">
  <div class="ps-form__field-inner">
    <input type="text" value="" id="profile_field_name" data-id="name" class="ps-input">
  </div>
  <div class="ps-form__field-desc lbl-descript">First name</div>
</div>