Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在jQuery选择器中使用函数参数_Javascript_Jquery - Fatal编程技术网

Javascript 在jQuery选择器中使用函数参数

Javascript 在jQuery选择器中使用函数参数,javascript,jquery,Javascript,Jquery,我有一个名为path的对象,它是: var path = { "firstFloor": ["roomA1", "roomA6", "roomA5", "roomA2", "roomA3", "roomA4", "roomA10"], "secondFloor": ["roomB4", "roomB5", "roomB6"], "basementFloor": []} 现在我通常选择阵列(path.firstFloor等),但我需要在一个函数中选择这些对,并将键作为参数,因此: fun

我有一个名为path的对象,它是:

var path = { "firstFloor": ["roomA1", "roomA6", "roomA5", "roomA2", "roomA3", "roomA4", "roomA10"],
  "secondFloor": ["roomB4", "roomB5", "roomB6"],
  "basementFloor": []}
现在我通常选择阵列(path.firstFloor等),但我需要在一个函数中选择这些对,并将键作为参数,因此:

function draw(floor) { //later on I will call this function with parameter firstFloor
  $(path.floor).each(function(i, val){ //this is where I need to select.
    var roomIdPath = path.firstFloor[i]
    //console.log(roomIdPath);
    var points = d3.select('#'+roomIdPath).attr('points').split(",");
    var midX = (Number(points[0]) + Number(points[6])) / 2;
    var midY = (Number(points[1]) + Number(points[3])) / 2;
    floorArray.push({"x": midX, "y": midY});
  });
}

不确定我是否清楚,基本上,我所需要的只是在jQuery选择器中使用函数参数的方法。是否仍要执行此操作?

如果要向函数发送键,则可以使用键访问映射到对象路径中键的值

当前您使用的是
path.floor
,这是错误的,因为它将在您需要使用的
path[floor]
路径对象中查找名为floor的键。您可以这样做:

 function draw(floor) { //later on I will call this function with parameter firstFloor
      $(path[floor]).each(function(i, val){ //this is where I need to select.
        var roomIdPath = path[floor][i];
        //console.log(roomIdPath);
        var points = d3.select('#'+roomIdPath).attr('points').split(",");
        var midX = (Number(points[0]) + Number(points[6])) / 2;
        var midY = (Number(points[1]) + Number(points[3])) / 2;
        floorArray.push({"x": midX, "y": midY});
      });
    }

尝试使用括号表示法
path[floor]
,相反,参数将是一个值而不是一个变量,并且不要忘记偶尔使用
console.log(variable)
进行调试

不确定我的问题是否正确: 您可以迭代元素的键(注意楼层可能是原型中具有其他属性的对象):

或者更好地使用Jquery:

$.each(floors, function(key, value){
    //do the thing you were doing in the question
    //key is your floor name, value is your array of rooms
});

通常会使用
$.each
而不是
$.fn.each
。无需将数组包装在
$()
@charlietfl中。您能说出您喜欢的原因吗?因为两者给出相同的结果。可读性是一个<代码>$。每个(数组/obj..显然与dom无关,而
$(数组)
与dom无关。同样,内部
$(数组)
在内部执行另一个
每个
$.each(floors, function(key, value){
    //do the thing you were doing in the question
    //key is your floor name, value is your array of rooms
});