【发布时间】:2019-12-27 18:33:43
【问题描述】:
我正在尝试按频道名称过滤电视频道元素。我有一个 html 输入元素,从中我得到它的值。然后,我遍历所有通道名称的数组,如果给定名称的 indexOf 返回值大于 -1,它会为通道分配一个“找到”类。
但是,如果输入值超过 4 个字符,则 indexOf 返回 -1。
输入值和通道名称都是 utf-8 格式(它们都是由同一个 php 文件生成的;有些名称是西里尔文,有些是英文)。不过,如果输入值仅包含英文字符,则 indexOf 可以正常工作。另外,如果我将任何频道名称记录到控制台,将其复制并粘贴到 html 输入中,indexOf 也可以正常工作。
我可以想象两个字符串具有不同字符集的情况,但为什么是 4 个字符?我该如何解决这个问题?
这是我的代码:
function searchChannels(search,context){
//search is form input val()
//context is their parent container
var search = search.toLowerCase();
channels = context.find('.channel-item');
channels.removeClass('found');
for(i = 0;i < channels.length;i++){
currChnl = $(channels[i]);
channelName = currChnl.attr('data-name').toLowerCase();
if(channelName.indexOf(search) > -1) currChnl.addClass('found');
}
};
输入字符串的示例是 Мульти(失败)、Муль(有效)和 Nat Geo Wild(有效)。频道名称分别为 Мультиладния 和 Nat Geo Wild。有趣的是,当我从页面复制通道名称或从代码检查器复制它的数据名称属性并将其粘贴到我的表单中时,它也可以工作。
另一个例子:'1-ый обр' 失败 '1-ый об' 适用于 '1-ый образовательный'
【问题讨论】:
-
你有失败匹配的样本数据集吗?您希望它匹配的字符串和输入?
-
ChrisG,输入字符串的示例有 Мульти(失败)、Муль(有效)和 Nat Geo Wild(有效)。频道名称分别为 Мультиладния 和 Nat Geo Wild。有趣的是,当我从我的代码检查器中复制频道名称或它的数据名称属性并将其粘贴到我的表单中时,它也可以工作。
-
'1-ый обр' 失败 '1-ый об' 在 '1-ый образовательный' 中工作
-
我不完全确定发生了什么,但是你的字符发生了一些编码。当我将它们粘贴到控制台时,我看到了一个额外的字符。 i.imgur.com/x5S7c5W.png
-
克里斯,尤里卡!我的网站上有一个 js 插件,它插入不可见的连字符以允许连字符(因为 css 连字符不适用于我的语言)。所以频道名称中有连字符(例如 Калейдоскоп 实际上是 Ка-лей-дос-коп),这就是您所看到的!我所要做的就是从插件的受影响元素列表中排除频道名称。也许你可以发布一个答案,以便我可以标记它?
标签: javascript indexof