IndexOf不能按预期工作:它只能找到少于5个字符的子字符串

问题描述 投票:0回答:1

我正在尝试通过频道名称过滤电视频道元素。我有一个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。有趣的是,当我从页面中复制通道名称或从代码检查器复制通道名称或data-name属性并将其粘贴到表单中时,它也起作用。

另一个示例:“1-ыйобр”在“1-ыйоб­ра­зова­тель­ный”中的“1-ыйоб”工作失败

javascript indexof
1个回答
1
投票

我不确定是怎么回事,但是您的字符正在编码。当我将它们粘贴到控制台中时,会看到一个额外的字符。 i.imgur.com/x5S7c5W.png

© www.soinside.com 2019 - 2024. All rights reserved.