gpt4 book ai didi

jquery - 使用 jquery inarray() 搜索字符串变量返回 -1

转载 作者:行者123 更新时间:2023-12-01 01:09:40 25 4
gpt4 key购买 nike

我正在尝试在数组中搜索字符串。如果该字符串匹配,我想知道该数组中的哪个索引号具有匹配的字符串。我相信我应该使用 inArray();但它总是返回-1

var $eventwrap = $j('.tw-events'),
$daywrap = $j('.tw-day'),
$dayfilter = $j('#tw-filter-days li a');
$daywraphide = $j('tw-day.hide'),
$catwrap = $j('.tw-event-filter'),
$viewctrls = $j('.tw-view a'),

// RELEVANT CODE STARTS HERE

$clonedays = $j('.select-days').html(),
$clonebarrio = $j('.select-barrio').html(),
$clonecats = $j('.select-cats').html(),
$opday = $clonedays.split("</option>"),
$opbarrio = $clonebarrio.split("</option>"),
$opcategory = $clonecats.split("</option>");

// RELEVANT CODE ENDS HERE

filters = {};


// CHECK IF A GIVEN DAY HAS EVENTS
function filterToggle(element,x,y) {
$j(element).each(function(){
var $me = $j(this),
isli = $me.is('li');
if(isli) {
var myvalue = $me.find('a').attr('data-filter');
} else {
// RELEVANT CODE STARTS HERE

var myselect = $me.parent().attr('data-filter-group'),
myvalue = $me.attr('data-filter'),
myfilter = String(myvalue);

// RELEVANT CODE ENDS HERE

}

if(!x) {x = ''}
if(!y) {y = ''}

var eventcount = $j('.tw-event'+ myvalue + x + y).length;

if(eventcount == 0) {
if(isli) {
$me.addClass('empty tdn');
} else {
$me.remove();
}
} else {
if(isli) {
$me.removeClass('empty tdn');
} else {

// RELEVANT CODE STARTS HERE

var myarray = eval("(" + '$op' + myselect + ")");

alert($j.inArray(myfilter,myarray));
// RELEVANT CODE ENDS HERE
}
}
});
}

我做错了什么?

最佳答案

这可能无法帮助您解决有关 inArray() 返回 -1 的原始问题,但我想阐明其他用户指出的问题。

eval() 的替代品

  • 如果您的 $op* 变量存在于全局范围内,您可以使用 window 对象并从那里访问它们:

     var myArray = window['$op' + myselect];
  • 更好的是,您可以通过将变量放入模块中来将其从全局范围中删除。也许尝试这样的事情:

    var myNamespace = (function() {
    var $eventwrap = $j('.tw-events'),
    $daywrap = $j('.tw-day'),
    $dayfilter = $j('#tw-filter-days li a'),

    ...

    $opday = $clonedays.split("</option>"),
    $opbarrio = $clonebarrio.split("</option>"),
    $opcategory = $clonecats.split("</option>");

    return {
    opday: $opday,
    opbarrio: $opbarrio,
    ...
    //whatever you need to access externally goes in the return object
    }

    })();

    //Now you can access these variables like so
    function filterToggle(element,x,y) {
    ...
    var myarray = myNamespace['$op' + myselect];
    ...
    }

变量声明

Javascript 是函数级范围的;不属于阻塞级范围。在 block 级作用域语言中,条件 block 内声明的变量是该 block 的本地变量。在 JavaScript 中情况并非如此,您可能会遇到一些奇怪的行为,例如变量提升。我不会详细介绍 JavaScript 范围,因为这篇文章已经太长了,但是 this很棒的文章详细地解释了它。

关于jquery - 使用 jquery inarray() 搜索字符串变量返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9936905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com