我怎样才能更简短地编写这个jQuery语句?

时间:2011-08-31 17:04:28

标签: javascript jquery

我有这个代码。这很完美,但我只想知道是否可以写得更短?我查看了jQuery hasClass()文档,但没有找到任何有用的东西。

$(this).hasClass('nw')
     ?'nw'
     :$(this).hasClass('ne')
          ? 'ne'
          : $(this).hasClass('sw')
               ? 'sw'
               : $(this).hasClass('se')
                    ? 'se'
                    : false ;

6 个答案:

答案 0 :(得分:2)

正则表达式:

var str = $(this).attr('class')
var re = /(\s|^)(nw|ne|sw|se)(\s|$)/
var theClass = str.match(re);
var handleCorner = theClass ? theClass[2] : null;

只是为了这个长度评论:[算这个!]

var a=$(this).attr('class').match(/(\s|^)(nw|ne|sw|se)(\s|$)/);
handleCorner=a?a[2]:null;

最佳效果代码是

var elm = $(this);
elm.hasClass('nw')
     ?'nw'
     :elm.hasClass('ne')
          ? 'ne'
          : elm.hasClass('sw')
               ? 'sw'
               : elm.hasClass('se')
                    ? 'se'
                    : false ;

Performance tests包含所有解决方案

答案 1 :(得分:2)

var t = $(this)
["ne","nw","sw","se"].filter(function(d) { return t.hasClass(d) })[0]

答案 2 :(得分:1)

使用data属性将内容存储为数据。看起来您正在跟踪路线。虽然您可能希望以某种特定方式设置方向,但您确实应该将方向保留在data-*属性中,可能是data-direction。然后你可以知道它是什么方向,并且仍然以它为基础。

如果你想看一个例子,请打我。


示例:

var direction = $(this).attr('data-direction');

//or slower, but more accurate:
var direction = $(this).data('direction');

不是那么短,表现更快吗? (提示:是的,是的)。阅读完其他帖子的评论后,这些都是您的目标。我说,要起来并加以标记。

答案 3 :(得分:1)

更新 - 这是错误的,我会删除它,但32bitkid的评论中有一个替代方案,您可能想要查看。

我认为您的代码非常简洁易读。如果你想削减一些角色,你可以做类似的事情:

var hc = $(this).hasClass;
handleCorner = hc('nw') ? 'nw' :  hc('ne') ? 'ne' : hc('sw') ? 'sw' : hc('se') ? 'se' : false ;

答案 4 :(得分:1)

我认为你不能明显地缩短它并保持相同的含义。

你已经以非常紧凑的方式写了它。

为了提高效率,您应该将$(this)保存为变量

$this = $(this);

$this.hasClass('nw')
     ?'nw'
     :$this.hasClass('ne')
          ? 'ne'
          : $this.hasClass('sw')
               ? 'sw'
               : $this.hasClass('se')
                    ? 'se'
                    : false ;

其他解决方案做出了不正确的假设,即没有其他类别。

请注意,如果您的解决方案不止一个,那么您将只获得您找到的第一个,而不是全部。不确定这是不是你的意图。

答案 5 :(得分:0)

没有必要更短,但更清晰和可扩展:

 handleCorner = false;
 for (i in a = ['nw','ne','sw','se']) {
   if ($this).hasClass(a[i]) {
     handleCorner = a[i];
   }
 }