2012-01-17 21 views
3

我编写了一个可以工作的函数,但这很丑陋。我敢肯定有一个更好的方式做我想做的,它可能变成了非常难看,因为我不是在JavaScript真的很好:d是否有可能找回匹配jQuery中的部分选择器的值?

我有可能有一类叫做view-in-boxview-in-box-640-480一些HTML元素。如果该类只是view-in-box,则会出现一个对话框,其中包含一些默认的宽度和高度,否则它将显示类名中指定的宽度和高度。

html元素类可以是这样的:class='note comment ui-button view-in-box-300-200 footer star'

我做了什么到现在为止是选择所有具有view-in-box在它的元素:

$('body').delegate('[class*=view-in-box]','click', function(){ 

然后我把它整个类属性,我循环来检查我是否能找到一个view-in-box或不。 这里是(简化)代码:

$('body').delegate('[class*=view-in-box]','click', function(){ 
    ... 
    var class_array = $(this).attr('class').split(" "); 
    for (var i = 0; i < class_array.length; i++) { 
     if (class_array[i].search('view-in-box-') != -1) { 
      box_text = class_array[i]; 
      break; 
     } 
    } 

    if (box_text !== null) { 
     box_array = box_text.split('-'); 
     .... 
    } 

    .... 
    return false; 
}); 

所以我想知道,有没有办法找回我的直接作用是什么匹配view-in-box谓词中?例如view-in-boxview-in-box-233-455。或者我真的必须获得完整的课程属性并将其分开。

希望我很清楚,JavaScript混淆了我! 谢谢。

+0

可以使用jquery的hasClass方法 – Dau 2012-01-17 10:36:16

+0

hasClass可以采取图案有“* “?!我仍然需要获得这些宽度和高度值。 – godbout 2012-01-17 10:38:34

+0

'hasClass'并不适合。您必须知道类的名称,因为它不支持通配符,无论如何,它不会返回类名称,只是布尔值。问题是,为什么不通过CSS类本身应用宽度/高度? – 2012-01-17 10:42:56

回答

2

您应该使用自定义data-*属性而不是类名来存储此数据。

所以不是:

<div class="note comment ui-button view-in-box-300-200 footer star"></div> 

请你帮个忙,并使用:

<div class="note comment ui-button view-in-box footer star" data-size="300-200"></div> 

然后,你可以使用$(el).data('size')获得使用jQuery的价值。

+0

另外,我建议使用'data-height'和'data-width'来代替'data-size'。 – falsarella 2012-01-17 11:13:14

+0

@falsarella如果你需要单独的值,当然! – 2012-01-17 21:14:41

+0

哦。这很好。非常感谢! – godbout 2012-01-18 11:48:36

1

正则表达式可用于简化您的代码;可以使用正则表达式替换JavaScript字符串功能(分割,的indexOf,搜索等):

/(?:^|\s)view-in-box(-\S+)?(?:\s|$)/; 

// (?:^|\s) -- non-capturing group that matches beginning of string or white-space 
// (-\S+)? -- optional capturing group that match hyphen + one or more non-white-space characters 
// (?:\s|$) -- non-capturing group that matches end of string or white-space 

实施例:

var rx = /(?:^|\s)view-in-box(-\S+)?(?:\s|$)/; 
rx.exec("view-in-box");           // ["view-in-box", undefined] 
rx.exec("view-in-box-foobar ");         // ["view-in-box-foobar ", "-foobar"] 
rx.exec("view-in-box-foo-bar");         // ["view-in-box-foo-bar", "-foo-bar"] 
rx.exec("note comment ui-button view-in-box-300-200 footer star"); // [" view-in-box-300-200 ", "-300-200"] 
rx.exec("view-in-boxXXXX");          // null 
rx.exec("XXXXview-in-box");          // null 
rx.exec("XXXX-view-in-box");          // null 
相关问题