jquery - 如何在 jquery ui selectmenu 中对齐字符串

标签 jquery css user-interface jquery-ui

我有一个有趣的问题没有找到任何答案:我在 Jquery Selectmenu 小部件中有一组字符串公司名称 + ID:

喜欢:

  • 公司 1 - 00000023
  • 非常大的公司名称 - 00000028
  • 另一家名气很大的公司 - 09900023

所以我们得到了这个选择菜单:

enter image description here

但是我想这样配置:

  • 公司 1 - 00000023
  • 非常大的公司名称 - 00000028
  • 另一家名气很大的公司 - 09900023

最终结果:

enter image description here

这是我的初始代码:

<!doctype html>
<html lang="us">
<head>
    <meta charset="utf-8">
    <title>Teste alignment</title>
    <link href="jquery-ui.css" rel="stylesheet">
</head>
<body>

<h1>Test Selectmenu</h1>

<select id="selectmenu">
    <option>Company 1 - 00000023</option>
    <option>Company very large name - 00000028</option>
    <option>Another Company that have a very very very large name - 09900023</option>
</select>

<script src="external/jquery/jquery.js"></script>
<script src="jquery-ui.js"></script>
<script>
    $( "#selectmenu" ).selectmenu( {width: 800});
</script>
</body>
</html>

最佳答案

如前所述,您将需要使用 _renderItem。根据您的描述,您的字符串有特定格式:

[item] - [id number]

首先要做的是拆分和包装每个部分,以便我们可以使用 CSS 设置样式。

function styleString(s){
  var result = "";
  parts = s.split(" - ");
  result += "<span class='item-title'>" + parts[0] + "</span> - <span class='item-id'>" + parts[1] + "</span>";
  return result;
}

现在我们必须将它添加到我们的元素中。

$("#selectmenu").selectmenu({
  width: 800
}).selectmenu("instance")._renderItem(function(ul, item){
  var $li = $("<li>");
  var item = styleString(item.value);
  $li.append("<div>" + item + "</div>");
  return $li.appendTo(ul);
});

您可以使用 item.valueitem.label

现在我们只需为元素设置样式。

$(function() {
  function styleString(s) {
    var result = "";
    parts = s.split(" - ");
    result += "<span class='item-title'>" + parts[0] + "</span> - <span class='item-id'>" + parts[1] + "</span>";
    return result;
  }
  $("#selectmenu").selectmenu({
    width: 800,
    change: function(e, ui){
      $("#selectmenu-button .ui-selectmenu-text").html(styleString(ui.item.value));
    }
  }).selectmenu("instance")._renderItem = function(ul, item) {
    var $li = $("<li>");
    var item = styleString(item.value);
    $li.append("<div>" + item + "</div>");
    return $li.appendTo(ul);
  };

  $("#selectmenu-button .ui-selectmenu-text").html(styleString($("#selectmenu-button .ui-selectmenu-text").text()));
});
.ui-selectmenu-text .item-id {
  position: absolute;
  right: 3em;
}

.ui-menu-item .item-id {
  float: right;
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<h1>Test Selectmenu</h1>
<select id="selectmenu">
    <option>Company 1 - 00000023</option>
    <option>Company very large name - 00000028</option>
    <option>Another Company that have a very very very large name - 09900023</option>
</select>

更新

在打开和更改的适当元素上使用相同的功能。也为其添加了 CSS。您没有在所选元素和菜单项中提到对此的需求。

关于jquery - 如何在 jquery ui selectmenu 中对齐字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48569871/

相关文章:

javascript - 三 Angular 形的 Bootstrap 列

javascript - 如何使滚动 jQuery 监听器适应 CSS 媒体查询? (Javascript/jQuery/Bootstrap )

jquery - 如何在链接下方显示div

javascript - 如何获取带有名称的选择框值

css - 如何在 Semantic-ui 中将顶部导航栏上的下拉按钮设置为事件状态?

C++ 开发 GUI - 类?

javascript - 单击 Enter 时提交文本区域

css - 当对象大于视口(viewport)时,CSS 居中

javascript - 将鼠标悬停在文本上时,文本会下降然后返回

ruby-on-rails - 潜在事件流垃圾邮件的 UX 解决方案