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>
答案 0 :(得分:4)
好吧,因为我们都建议使用不同版本的相同代码,所以这是我的:
var namespace = 'test';
var id = '_service_selected_';
$(["[id^=", namespace, "_", id, "_]"].join(''));
我还对目前发布的所有建议进行了一些速度测试。我的在Firefox和Chrome上排名最快,在IE8上排名第二。 Josh Stodola根本不起作用。
以下是测试套件: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
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
答案 1 :(得分:2)
怎么样
var selId = "[id*=" + namespace + "_service_selected_]";
$j(selId).click(function(){
...
我认为你对引号过多感到困惑!
答案 2 :(得分:2)
我会使用startsWith选择器来获取元素的命名空间,然后查询 it 来获取你的匹配...
var namespace = "test";
var itemspace = "_service_selected_";
var ns = $("[id^=" + namespace + "]");
var nsItems = $("[id*=" + itemspace + "]", ns);
答案 3 :(得分:1)
您可以搜索两次
$j("[id*=" + namespace + "]").filter("[id*=service_selected_]").click(function(){