【问题标题】:How to make reuse JavaScript function properties using objects如何使用对象重用 JavaScript 函数属性
【发布时间】:2020-04-17 12:52:08
【问题描述】:

我正在尝试使用 javascript 创建 HTML 元素及其属性,我需要在几个地方重复使用它,而无需编写重复的相同代码。仅供参考,下面是我在对象中声明的代码。

我想将此代码用于包含标签、相同类的其他元素。

addNewLabels : function(){
    var selectnewPwText = document.createElement('LABEL');
    selectnewPwText.innerText = "Select label Name";
    selectnewPwText.classList.add("mystyle");
    document.querySelector('.select-new-password').appendChild(selectnewPwText);
  }

var resetPasswordControls = {
  passwordBtnInnerText: "Something else",
  passwordBtn : function() {
    return this.passwordBtnInnerText;
  },
  
  passwordHintText : function() {
    var para = document.createElement("P");
    para.innerHTML = "This is a paragraph.";
    document.querySelector(".m-hint").appendChild(para);
  },


  addNewLabels : function(){
    var selectnewPwText = document.createElement('LABEL');
    selectnewPwText.innerText = "Select label Name";
    selectnewPwText.classList.add("mystyle");
    document.querySelector('.select-new-password').appendChild(selectnewPwText);
  }
};

// Display data from the object:
document.getElementById("btn-login").innerText = resetPasswordControls.passwordBtn();
resetPasswordControls.passwordHintText();
resetPasswordControls.addNewLabels();
<form onsubmit="return false;" method="post">
	<div class="form-group has-feedback has-feedback-left">
	 <label for="name" class="select-new-password"></label>
	 <input autocomplete="off" class="form-control required" id="Password" maxlength="20" name="Password" type="password" value="" aria-required="true">
		<p class="m-hint">Must use 8-20 characters and one number or symbol.</p>
	</div>

	<div class="form-group has-feedback has-feedback-left">
	  <label for="name" class="retype-new-password"></label>
	  <input type="password" class="form-control" id="password" placeholder="Enter your password">

<button type="submit" id="btn-login">Some Text need to replace</button>

	</div>
  </form>

【问题讨论】:

    标签: javascript html css css-selectors


    【解决方案1】:

    您可以让您的函数以arguments 的形式接收属性,以下是您如何实现该功能的示例:

      var resetPasswordControls = {
      passwordBtnInnerText: "Something else",
      passwordBtn : function() {
        return this.passwordBtnInnerText;
      },
      
      passwordHintText : function() {
        var para = document.createElement("P");
        para.innerHTML = "This is a paragraph.";
        document.querySelector(".m-hint").appendChild(para);
      },
    
    
      addNewLabels : function(element, innerText, className, appendTo){
        var selectnewPwText = document.createElement(element);
        selectnewPwText.innerText = innerText;
        selectnewPwText.classList.add(className);
         appendTo = appendTo || 'body';
        document.querySelector(appendTo).appendChild(selectnewPwText);
      }
    };
    
    // Display data from the object:
    document.getElementById("btn-login").innerText = resetPasswordControls.passwordBtn();
    resetPasswordControls.passwordHintText();
    resetPasswordControls.addNewLabels('LABEL', "Select label Name", "mystyle", '.select-new-password');
    <form onsubmit="return false;" method="post">
    	<div class="form-group has-feedback has-feedback-left">
    	 <label for="name" class="select-new-password"></label>
    	 <input autocomplete="off" class="form-control required" id="Password" maxlength="20" name="Password" type="password" value="" aria-required="true">
    		<p class="m-hint">Must use 8-20 characters and one number or symbol.</p>
    	</div>
    
    	<div class="form-group has-feedback has-feedback-left">
    	  <label for="name" class="retype-new-password"></label>
    	  <input type="password" class="form-control" id="password" placeholder="Enter your password">
    
    <button type="submit" id="btn-login">Some Text need to replace</button>
    
    	</div>
      </form>

    【讨论】:

    • 好吧!您传递的参数,如何将 addNewLabels() 属性应用于另一个文本框。如果没记错 appendTo = appendTo || '身体';这不是必需的,相信我们已经通过查询选择器调用了元素。如果我们删除它,它也会起作用 appendTo = appendTo || '身体';
    • 我刚刚在此处添加了如何使您的代码动态化的演示,所以基本上您可以使用 appendTo = appendTo || '身体';将其删除或默认为您想要的任何内容以及您可以添加的许多其他内容,以使您的代码动态和可重用。
    • @Durgesh,很高兴为您提供帮助,请接受它作为答案:)
    • 我猜需要做一些小问题调整,上面的代码,我相信由于应用了 appendChild,元素在标签内呈现,下面是代码的输出,新元素显示在元素之后追加,我试图添加 insertAdjacentHTML 并且似乎不正确。
    • 我这样修复它按预期工作。 tks document.querySelector(appendTo).appendChild(selectnewPwText).nextSibling;
    猜你喜欢
    • 2019-10-04
    • 2015-09-21
    • 2014-03-28
    • 2012-07-18
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多