2013-04-15 72 views
0

我想有这将返回连接到元素的一个或多个变量的函数,用于指定的边框或边界的例子返回颜色(可以使用jQuery的话):创建JS函数与多个参数

$('element').borderColor(); // should return "red, blue, green, orange" 
$('element').borderColor('left'); // should return "red" 
$('element').borderColor('left', 'right'); // should return "red, green" 

等等。

这里的例子:http://jsfiddle.net/DkGpP/

问题1:我应该如何构建脚本的一部分(这实际上是if/else语句)才重新回到我想要的东西(其实$( '元素')BORDERCOLOR( 'left','right');仍然只显示“红色”)?

问题2:我的功能灿参数可以不喜欢撇号被称为:

$('element').borderColor(left); 
$('element').borderColor(left, right); 

如果是,如何重建(实际显示“未定义”)。它是否需要构建如下功能:

jQuery.fn.borderColor = function(left, top, right, bottom) { 

我会很感激的帮助。

+0

如果$('element')选择多个元素会发生什么?它应该只针对第一个发现的目标吗? –

+0

第二个问题的答案是,没有单引号,'left'和'right'被视为变量,它们的值被用作参数。如果你还没有分配它们,那么值是'undefined'。 – Barmar

+0

我会用它来元素不能是多个(我的意思是通过ID称他们)。 –

回答

1

我会用这样的东西。对象将数组。

1

您不需要if-else结构。

jQuery.fn.borderColor = function() {  
    var tag = $(this).eq(0), ret = []; 
    var arr = arguments.length > 0 ? arguments : ["left","top","right","bottom"]; 
    for (var i = 0; i < arr.length; i++) { 
     ret.push(tag.css("border-" + arr[i] + "-color")); 
    } 
    return ret.join(","); // remove .join(",") to get a useful array 
}; 

var myborder = $('#tester').borderColor('left', 'right'); 
$('#result').text(myborder); 

Demo

+0

如果我想添加更多参数,如:宽度,高度,位置等,该怎么办? –

+0

然后它会超出插件的范围,因为它被称为'borderColor'。在宽度和高度上做这件事是没有意义的,只需使用'.css','.width'或'.height'。就位置而言,这也已经存在于'.position'中。 –

+0

我知道,但没有位置的权利和底部jQuery构建,也可以调用宽度或高度以某种方式指定像我的“宽度”将是真正的宽度x 2等。 –

0

当我必须处理多个参数,我通常喜欢去“选择”的方式,这意味着该参数是与定义的各种属性的js对象。

在你的榜样,我会写这样的测试:

if (border == null) // or undefined, add a test here 
    return [borderLeft, borderTop, borderRight, borderBottom]; 

// skip the else 
result = []; 
if (border.left) 
    result.push(borderLeft); 
if (border.right) 
    result.push(borderRight); 
// etc. etc. 
return result; 

而且这样调用该函数:

var myborder = $('#tester').borderColor({ left: true, right: true }); 

正如你可以看到我传递一个对象,只有具有确定左边和右边的属性。我将它们设置为true,但任何评估为“truthy”值的东西都可以。

小提琴:http://jsfiddle.net/DkGpP/2/

+0

我厌倦了避免“选择”的方式,但可能它是最容易的。 –