Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
是否可以在jQuery中获取与部分选择器匹配的值?_Jquery_Html_Css Selectors_Jquery Selectors - Fatal编程技术网

是否可以在jQuery中获取与部分选择器匹配的值?

是否可以在jQuery中获取与部分选择器匹配的值?,jquery,html,css-selectors,jquery-selectors,Jquery,Html,Css Selectors,Jquery Selectors,我已经编写了一个可以工作的函数,但这很难看。我很确定有更好的方法来做我想做的事情,结果可能非常糟糕,因为我不太擅长javascript:D 我有一些html元素,它们可能有一个名为view-in-box或view-in-box-640-480的类。如果类仅在框中查看,将显示一个对话框,其中包含一些默认的宽度和高度,否则将显示在类名中指定的宽度和高度 html元素类可以是这样的:class='note comment ui button view-in-box-300-200 footer sta

我已经编写了一个可以工作的函数,但这很难看。我很确定有更好的方法来做我想做的事情,结果可能非常糟糕,因为我不太擅长javascript:D

我有一些html元素,它们可能有一个名为
view-in-box
view-in-box-640-480
的类。如果类仅在框中查看,将显示一个对话框,其中包含一些默认的宽度和高度,否则将显示在类名中指定的宽度和高度

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

到目前为止,我所做的是选择所有包含
view in box
的元素:

$('body').delegate('[class*=view-in-box]','click', function(){
然后,我获取整个类属性,并在其上循环,以检查是否可以在框中找到
视图。
以下是(简化)代码:

$('body')。委托('class*=框中视图],'click',函数(){
...
var class_array=$(this.attr('class').split(“”);
对于(var i=0;i
所以我想知道,有没有一种方法可以直接返回到我的函数中,它与框中的
视图
谓词匹配?例如
查看收件箱
查看收件箱-233-455
。或者我真的必须得到完整的类属性并将其拆分

希望我清楚,javascript让我困惑!
谢谢。

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

因此,不是:

<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获取值。

是的,可以:


但是,我会推荐解决方案。

可以使用正则表达式简化代码;您可以用正则表达式替换JavaScript字符串函数(拆分、索引、搜索等):

/(?:^|\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

您可以使用jquery的hasClass方法hasClass可以采用带有“*”的模式?!我仍然需要得到那些宽度和高度值。
hasClass
并不是很合适。您必须知道类的名称,因为它不支持通配符,而且它不返回类名,只返回布尔值。问题是,为什么不通过css类本身应用宽度/高度?因为我需要为所有可能需要的宽度/高度创建许多css类,对吗?当我添加新的宽度/高度时,还要记得创建类。使用我的方法,您只需发送所需的内容,对话框就会动态地获得正确的大小。或者我很笨,我错过了一些明显的东西?喜欢动态css吗DAlso,如果您需要单独的值,我建议使用
数据高度
数据宽度
,而不是
数据大小
@falsarella!哦这很好。谢谢!谢谢你的链接!是的,我认为Mathias解决方案更适合这种情况,但我相信您的链接在其他情况下也会有用。
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