从下拉列表中选择类似的选项

时间:2018-08-07 15:13:40

标签: javascript jquery html

我有一个下拉菜单,其中有几个。我正在写一些jQuery默认为登录用户的。问题是当我的某些文字过于相似时。

//this variable gets the branch name of the logged in user
var branchName = $(".logged-in-branch-name").text();
//this makes the dropdown select the correct branch for the logged in user
$("#branchcode option:contains('" + branchName + "')").prop('selected', true);

这一切都很好。除非文字相似。示例:

“大学1” “学院1-在线”

当变量branchName为“学院1”时,下拉菜单始终默认为“学院1-在线”。

当变量为“学院1-在线”时,它会正确转到“学院1-在线”下拉菜单。

是否有关于如何正确过滤这些内容的想法?

谢谢。

2 个答案:

答案 0 :(得分:1)

检查绝对文本值,而不是包含。

$("#branchcode").find('option').each(function(){
    if ($(this).text() === branchName)
    {
        $(this).prop('selected', true);
    }
});

甚至

$("#branchcode").find('option').each(function(){
      $(this).prop('selected', $(this).text() === branchName);
});

答案 1 :(得分:0)

交换此行:

$("#branchcode option:contains('" + branchName + "')").prop('selected', true);

对于此代码:

$("#branchcode option')
    .filter(function () {
        return $(this).text() === branchName;
    })
    .prop('selected', true);

您的代码存在的问题是,在您的案例中将“ :contains”与“学院1”配合使用时,同时匹配“学院1” “学院1-在线”,我会假设(因为您未提供html)选择不多,所以最后一个匹配选项结束选择。


取决于您的html,您可能需要在option元素的文本之前或之后处理空格,只需在其中添加$ .trim即可。

return $.trim($(this).text()) === branchName;