【问题标题】:Dynamically update title property based on current menu item using javascript使用javascript根据当前菜单项动态更新标题属性
【发布时间】:2021-02-09 13:51:13
【问题描述】:

var a; titleText=""; hardCodedTitle="";
var menuCount = document.getElementsByClassName().length;
$('a.UserSelectedItems').each(function(){
for(a=0; a<menuCount; a++){
title += $('a.UserSelectedItems')[a].innerText;
if(title == "B-1"){
hardCodedTitle = "B-1: Business sector 1";
$('a.UserSelectedItems').attr('title',hardCodedTitle);
}
else if(title == "B-2"){
hardCodedTitle = "B-2: Business sector 2";
$('a.UserSelectedItems').attr('title',hardCodedTitle);
}
else if(title == "D-5"){
hardCodedTitle = "D-5: Development group 5";
$('a.UserSelectedItems').attr('title',hardCodedTitle);
}
else{
hardCodedTitle = "Not categorized";
$('UserSelectedItems').attr('title',hardCodedTitle);
}
}
});
<div class="ui menu" id="Menu">
    <a class="UserSelectedItems" title="A-1">A-1</a>
    <a class="UserSelectedItems" title="A-2">A-2</a>
    <a class="UserSelectedItems" title="B-1">B-1</a>
    <a class="UserSelectedItems" title="B-2">B-2</a>
    <a class="UserSelectedItems" title="D-2">D-2</a>
    <a class="UserSelectedItems" title="D-5">D-5</a>
    <a class="UserSelectedItems" title="E-2">E-2</a>
    </div>
<input type="text" id="populateTitle" placeholder="hardcoded title populate OnClick menu items">
//OnClick of menu item, hardcode title value as per the js should be populated in this text box

我有一个要求,在悬停每个菜单项(菜单根据用户选择动态更新)时,必须动态填充硬编码标题。到目前为止,我能够将动态菜单项作为标题,我需要帮助来使用 javascript 根据每个动态菜单项填充硬编码的标题。

以上是显示我的场景的示例代码(不是有效的确切代码)。首先基于用户选择,填充菜单项(可能很少有未选择的)。所以我的要求是根据用户选择的菜单项将硬编码值显示为标题。

如果用户选择项目: B-1,B-2,D-5 ,则硬编码的标题必须在悬停每个菜单项时显示为弹出窗口。

div class="ui menu" id="Menu">
...
<a class="UserSelectedItems" title="${eachDataSet.getKey()}">${eachDataSet.getKey()}</a>
</div>

我的实际 html 代码看起来有点像上面。谢谢!

第二次编辑... 我使用了下面的代码(由@rucha 回答),它工作正常。现在额外的要求是我有一个文本类型的输入字段。如何在单击每个项目时填充标题(每个菜单项的硬编码标题)作为文本框值?

【问题讨论】:

  • 请。分享您的代码,以便人们知道如何为您提供帮助。

标签: javascript html semantic-ui menuitem title


【解决方案1】:

有一些基本错误,例如,

  1. 访问document.getElementsByClassName() 时,需要传递类名。喜欢document.getElementsByClassName("UserSelectedItems");
  2. 如果您使用 $.each,则无需出于相同目的再次使用 for 循环。

我已修改代码,以便在 $.each 块内,根据您的条件将标题分配给每个 &lt;a&gt; 链接。

var a;
titleText = "";
hardCodedtitle = "";
var menuCount = document.getElementsByClassName("UserSelectedItems");
$(menuCount).each(function(index, item) {
  title = item.title;
  if (title == "B-1") {
    hardCodedTitle = "B-1: Business sector 1";
    $(item).attr("title", hardCodedTitle);
    $(item).attr("data-hardcoded", "true");
  } else if (title == "B-2") {
    hardCodedTitle = "B-2: Business sector 2";
    $(item).attr("title", hardCodedTitle);
    $(item).attr("data-hardcoded", "true");
  } else if (title == "D-5") {
    hardCodedTitle = "D-5: Development group 5";
    $(item).attr("title", hardCodedTitle);
    $(item).attr("data-hardcoded", "true");
  } else {
    hardCodedTitle = "Not categorized";
    $(item).attr("title", hardCodedTitle);
    $(item).attr("data-hardcoded", "true");
  }

});

function populateTitle(e) {
  if (e.currentTarget.hasAttribute("data-hardcoded")) {
    $("#populateTilte").val(e.currentTarget.getAttribute("title"));
  } else {
    $("#populateTilte").val("");

  }

}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script>
<div class="ui mini vertical menu" id="verticalMenu">
  <a class="UserSelectedItems" title="A-1" onclick="populateTitle(event)">A-1</a>
  <a class="UserSelectedItems" title="A-2" onclick="populateTitle(event)">A-2</a>
  <a class="UserSelectedItems" title="B-1" onclick="populateTitle(event)">B-1</a>
  <a class="UserSelectedItems" title="B-2" onclick="populateTitle(event)">B-2</a>
  <a class="UserSelectedItems" title="D-2" onclick="populateTitle(event)">D-2</a>
  <a class="UserSelectedItems" title="D-5" onclick="populateTitle(event)">D-5</a>
  <a class="UserSelectedItems" title="E-2" onclick="populateTitle(event)">E-2</a>
</div>

<input type="text" id="populateTilte" placeholder="Hardcoded Title">

【讨论】:

  • 我已经进行了上述更改,并且对我来说效果很好。谢谢!!
  • 我们可以在常量字段中填充那些硬编码的值吗?我的意思是每个菜单项的onclick,单击项的硬编码标题将填充在创建的字段中
  • 所以,我有输入文本框 - 。我想用每个选择的标题填充这个文本框。如何做到这一点?
  • 编辑了代码。在每个元素上创建一个新的数据属性,并在文本框中填充相同的值。
  • OnClick 工作正常,我尝试使用 onload 功能。默认情况下,第一个菜单项被选中,我想保持原样..可以做同样的加载吗?我试过 $(each dataset.getKey()}.. 但它是不适合我..
猜你喜欢
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2017-03-11
  • 2010-12-21
  • 1970-01-01
  • 2012-12-27
相关资源
最近更新 更多