【问题标题】:Display output to multiple classes via JavaScript通过 JavaScript 向多个类显示输出
【发布时间】:2018-04-04 13:46:20
【问题描述】:

我正在编写一个“游戏本引擎”,它提供了设置用户名的可能性。名称取自 id="setUserNameInput" 的输​​入,并由函数 setUserName() 保存。它显示/加载到包含 class="displayUserName" 的元素中,并由函数 displayUserName() 加载。它只适用于一个页面的一个类,但是一旦我添加更多,我就必须定义要定位哪一个,因为它不会自动将它们全部定位。我曾尝试使用 document.getElementById、document.getElementsByName 以及 document.querySelectorAll 和 document.querySelector,但都不起作用。 (顺便说一下,我使用 Bulma 作为我的 CSS 框架)

这是我到目前为止的代码(尽管它会显示错误,因为它无法访问 sn-p 内的 localStorage): 此页面http://scampsblog.com/docs/example-de.html 包含一个(工作,哈哈)示例。由于它是一个文档(页面位于我的测试服务器上,因此是域),您可能需要查看 http://scampsblog.com/docs/character-enginedotjs-de.html,它解释/显示了各个元素(文档是德语,但如果您需要,我可以提供翻译一)。

我正在努力解决的 JS 部分就在第一行,但如果您提出一些整体改进建议,我将很乐意接受。

var userNameOutput = document.getElementsByClassName('displayUserName')[0];

function setUserName() {
  var usernameinput = document.getElementById('setUserNameInput').value;
  localStorage.setItem('userName', usernameinput);

  if (!localStorage.getItem('userName')) {
    setUserName();
  } else {
    var storedUserName = localStorage.getItem('userName');
    userNameOutput.innerHTML = storedUserName;
  }
}


function displayUserName() {
  if (!localStorage.getItem('userName')) {
    setUserName();
  } else {
    var storedUserName = localStorage.getItem('userName');
    userNameOutput.innerHTML = storedUserName;
  }
}

window.onload = function displayUserName() {
  if (!localStorage.getItem('userName')) {
    setUserName();
  } else {
    var storedUserName = localStorage.getItem('userName');
    userNameOutput.innerHTML = storedUserName;
  }
}
<input type="text" class="input" placeholder="Your name goes here" id="setUserNameInput">


<input type="button" class="button" value="Set your username" onclick="setUserName()" />



<input type="button" class="button" value="Display on click" onclick="displayUserName()" />
<br> So you shall be called <span class="displayUserName"></span>! But dont worry, <span class="displayUserName"></span>, it will be all fine.

【问题讨论】:

    标签: javascript html css class


    【解决方案1】:

    您可以迭代它(使用for...of)而不是获取集合中的第一个项目(使用for...of)并设置每个具有displayUserName类的元素的innerHTML

    例如

    var userNameOutputs = document.querySelectorAll('.displayUserName');
    
    for (let ele of userNameOutputs) {
      ele.innerHTML = userName;
    }
    

    完整代码,对结构进行了一些优化:

    function setUserName() {
      var usernameinput = document.getElementById('setUserNameInput').value;
      localStorage.setItem('userName', usernameinput);
      displayUserName(true); // pass true to avoid recursion
    }
    
    function displayUserName(skipSet) {
      var userName = localStorage.getItem('userName');
      
      if (!userName && !skipSet) {
        setUserName();
      } else {
        var userNameOutputs = document.querySelectorAll('.displayUserName');
        
        for (let ele of userNameOutputs) {
          ele.innerHTML = userName;
        }
      }
    }
    
    window.onload = displayUserName;
    <input type="text" class="input" placeholder="Your name goes here" id="setUserNameInput">
    
    <input type="button" class="button" value="Set your username" onclick="setUserName()" />
    
    <input type="button" class="button" value="Display on click" onclick="displayUserName()" />
    <br> So you shall be called <span class="displayUserName"></span>! But dont worry, <span class="displayUserName"></span>, it will be all fine.

    工作小提琴:https://jsfiddle.net/hosney/3pxfybrc/1/

    【讨论】:

    • 谢谢!但我不确定如何将它实现到我的代码中以使其正常工作(并且不会破坏其他任何东西 -> 我对 JavaScript 很陌生,并且为了学习语言而制作这个项目)一个 JSfiddle 会很棒。
    • 添加了小提琴链接
    • 非常感谢,它正在工作!请问你是怎么学JS的?
    • 不客气。主要是通过使用它,回答问题并在 StackOverflow 和谷歌搜索上查看答案。此外,Douglas Crockford 的 JavaScript: The Good Parts 一书也帮助我入门。你可能想试一试。顺便说一句,您可以通过勾选旁边的支票来接受答案吗?
    • 谢谢。我一定会看看那本书
    【解决方案2】:

    var userNameOutput = document.getElementsByClassName('displayUserName')[0];

    [0] 选择类名的元素数组的第一个元素。

    【讨论】:

    • 我知道,但这是(我知道)至少选择一个的唯一有效方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 2021-07-15
    • 2016-01-15
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多