通过正则表达式jQuery按id获取元素

通过正则表达式jQuery按id获取元素,jquery,regex,unique,wildcard,Jquery,Regex,Unique,Wildcard,Html元素包含复杂且唯一的id,由作为前缀的名称空间和作为后缀的递增索引组成 我尝试使用id的通配符表达式 如果要使用不带命名空间的简单方式,则它可以正常工作: $j("[id*=service_selected_]").click(function(){ ... 为了保持唯一性,我需要在id中提供名称空间部分,但不是这样解决的: var selId = "'" + '[id*=' + namespace + '_service_selected_]' + "'"; $j(selId).c

Html元素包含复杂且唯一的id,由作为前缀的名称空间和作为后缀的递增索引组成

我尝试使用id的通配符表达式

如果要使用不带命名空间的简单方式,则它可以正常工作:

$j("[id*=service_selected_]").click(function(){
...
为了保持唯一性,我需要在id中提供名称空间部分,但不是这样解决的:

var selId = "'" + '[id*=' + namespace + '_service_selected_]' + "'";

$j(selId).click(function(){
...

在.jsp部分下面:

        <c:forEach var="package" items="${packages.page}" varStatus="status">
            <tr>
                <td>
                    ${package.name}
                </td>
                <td id="<portlet:namespace/>_service_price_${status.index}">${package.price}</td>
                <td >
<input type="checkbox" name="service_id" value="${package.id}" id="<portlet:namespace/>_service_selected_${status.index}">
                </td>
            </tr>
        </c:forEach>

${package.name}
${package.price}
怎么样

var selId = "[id*=" + namespace + "_service_selected_]";
$j(selId).click(function(){
...
我想你被太多的引号弄糊涂了

您可以搜索两次

$j("[id*=" + namespace + "]").filter("[id*=service_selected_]").click(function(){

我将使用startsWith选择器获取元素的名称空间,然后对其进行查询以获取匹配项

var namespace = "test";
var itemspace = "_service_selected_";

var ns = $("[id^=" + namespace + "]");
var nsItems = $("[id*=" + itemspace + "]", ns);

好吧,既然我们都在建议相同代码的不同版本,下面是我的:

var namespace = 'test';
var id = '_service_selected_';
$(["[id^=", namespace, "_", id, "_]"].join(''));
我还对目前发布的所有建议进行了一些速度测试。我的浏览器在Firefox和Chrome上运行速度最快,在IE8上排名第二。乔什·斯托多拉的根本不起作用

这是测试套件:(可编辑通过)

结果如下:

火狐 铬 IE8
你有一些样本HTML我们可以看看吗?很难确定到底发生了什么。名称空间是一个变量…嗯..似乎我需要使用这种情况。匹配类似的内容:$j(this).attr('id')。匹配(名称空间).filter(“[id*=service\u selected\u]”)。单击(function(){k我将其更改为一个变量。恐怕您的代码无法按预期工作。jQuery将尝试从
ns
集中每个元素的子元素中进行选择,而不是从集合中的元素本身进行选择。您可以通过将
ns
集合附加到新的
来实现此功能,但这只会增加与更简单的解决方案相比,处理更简单。分析很好!不知道我是否可以节省一些毫秒的时间!做了一个快速测试,结果表明您的选择器和我的选择器之间的唯一区别是您的使用
*=
('contains')选择器,而我的使用
^=
('begins with'))我尝试使用
join()
方法进行优化似乎没有用,但在IE8上更糟糕!
select_Phil 37 ms 36 selected
select_Ghommey 120 ms 36 selected
select_Josh_Stodola 1077 ms 0 selected
select_brianpeiris 31 ms 36 selected
select_Phil 17 ms 36 selected
select_Ghommey 108 ms 36 selected
select_Josh_Stodola 290 ms 0 selected
select_brianpeiris 15 ms 36 selected
select_Phil 69 ms 36 selected
select_Ghommey 300 ms 36 selected
select_Josh_Stodola 1632 ms 0 selected
select_brianpeiris 73 ms 36 selected