0

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>
4

4 回答 4

4

好吧,因为我们都在建议相同代码的不同版本,所以这是我的:

var namespace = 'test';
var id = '_service_selected_';
$(["[id^=", namespace, "_", id, "_]"].join(''));

我还对迄今为止发布的所有建议进行了一些速度测试。我的恰好是 Firefox 和 Chrome 上最快的,在 IE8 上是第二好的。乔什·斯托多拉的根本不起作用。

这是测试套件: http: //jsbin.com/igate(可通过http://jsbin.com/igate/edit编辑)

结果如下:

火狐

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

IE8

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
于 2009-10-09T00:46:40.640 回答
2

怎么样

var selId = "[id*=" + namespace + "_service_selected_]";
$j(selId).click(function(){
...

我想你对太多的引号感到困惑!

于 2009-10-08T14:57:33.063 回答
2

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

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

var ns = $("[id^=" + namespace + "]");
var nsItems = $("[id*=" + itemspace + "]", ns);
于 2009-10-08T15:11:07.013 回答
1

您可能会搜索两次

$j("[id*=" + namespace + "]").filter("[id*=service_selected_]").click(function(){
于 2009-10-08T15:00:40.140 回答