2011-01-27 60 views
15

我试图建立与下面的代码中的动态jQuery选择:jQuery选择内使用变量

var section_id = "{segment_3}"; 
var num_children = $('#'+ section_id + ' ul').children().size(); 

其中segment_3是一个值我从URL字符串,成功检索的,例如,可能返回“section_one”的值

但试图创建变量num_children时,此引用不起作用。我如何构建代码来构建动态引用?谢谢你的帮助。

+4

元素的ID是否真的是{{segment_3}`?大括号使其无效。 – lonesomeday 2011-01-27 23:57:14

+0

当你使用它时,你的section_id var是否真的不包含花括号?那会造成问题。 – CalebHC 2011-01-27 23:58:29

回答

35

假设VAR SECTION_ID = 'section_1' 这样的:

$('#'+ section_id + ' ul').children().size(); 

会给你

$('#section_1 ul').children().size(); 

,是的,这是有效的为好。它会为你提供#section_1元素中的所有ul元素(不管它们有多深)。可能你会得到一些元素,并调用.children()也很好。它应该都可以工作。

0

尝试

var num_children = $('#'+ section_id.substring(1, section_id.length-2) + ' ul').children().size(); 
0

上述评论是正确的......对于一个id选择的基本语法是$(#ITEMID)...

VAR myvalue的= $( “#new_grouping _” + ⅰ).VAL(); //这个工程

1

截至HTML 4.01 id属性受到很大限制有关允许值的字符(命名规则):

id属性必须以字母 AZ或az,随后开始:字母 (A-Za-z),数字(0-9),连字符(“ - ”), 下划线(“_”),冒号(“:”)和 句点(“。”),所有值均为 区分大小写。

*注:根据我的经验,我发现只使用小写字符和_为ID的令他们非常清楚,他们脱颖而出CSS选择器(.something:伪类)*

在另一方面在HTML5中,你几乎可以拥有任何id的值。

编号:http://www.w3.org/TR/html5/elements.html#the-id-attribute

所以,你的选择是完全没有问题的(有效)与HTML5规格,但为了得到它与jQuery的工作,你需要躲避选择解析器有特殊含义使用的所有字符。由于它的JavaScript代码,你必须使用两个\\(第一个转义第二个)。 JQuery的不为您提供一种方式来做到这一点,所以下面是我使用的代码:我编辑的代码,很少失误,其中固定

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <title>jQuery HTML5 Selector Escaping</title> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
    <script type="text/javascript"> 

    // Ths is the list of special characters used by jquery selector parser 
    // !"#$%&'()*+,./:;[email protected][\]^`{|}~ 
    $(document).ready(function() { 
     var selector = '{my_%real{ly:s#tra`n[ge_i]d_n^@a|me>}'; 
     selector = selector.replace(/([ {}\|`\^@\?%#;&,.+*~\':"!^$[\]()=>|\/])/g,'\\$1'); 
     var object = $('#'+selector+' ul').children().size(); 
     alert('UL has '+ object +' LIs'); 
    }); 

    </script> 
</head> 
<body> 
    <div id="{my_%real{ly:s#tra`n[ge_i]d_n^@a|me>}"> 
     <ul> 
      <li>Sehr</li> 
      <li>Gut</li> 
      <li>Doh</li> 
     </ul> 
    </div> 
</body> 
</html> 

例。 :)