我有这个代码。这很完美,但我只想知道是否可以写得更短?我查看了jQuery hasClass()文档,但没有找到任何有用的东西。
$(this).hasClass('nw')
?'nw'
:$(this).hasClass('ne')
? 'ne'
: $(this).hasClass('sw')
? 'sw'
: $(this).hasClass('se')
? 'se'
: false ;
答案 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];
}
}