jQuery选择器字符串+动态变量

时间:2014-07-07 17:47:32

标签: jquery dynamic jquery-selectors

我想从以下网址获取网址参数并提取最后一个参数:

http://localhost/projecct/Menus/page/8

这给了我8

var url = window.location.toString();
var pid = url.substring(url.lastIndexOf('/') + 1); // this gives 8
var currentMenu=('menu'+pid);                      //this gives menu8
alert($('.'+currentMenu).html());                  //but this give me null 
//the above line is where I stucked

我想为所有选定的display:block的父级设置CSS属性ul

$('.'+currentMenu).parents("ul").css({'display':'block'});

HTML:

  <ul>
     <li class='menu1'>
        <a href='#'>Menu1</a>
        <ul>
           <li class='menu11'>
               <a href='#'>Menu11</a>
               <ul>....</ul>
           </li>
        </ul>
     </li>

     <li class='menu2'>
        <a href='#'>Menu2</a>
        <ul>
           <li class='menu21'>
               <a href='#'>Menu21</a>
               <ul>....</ul>
           </li>
           <li class='menu22'>
               <a href='#'>Menu22</a>
               <ul>....</ul>
           </li>
        </ul>
     </li>

     <li class='menu3'>
        ..........
     </li>
  </ul>

1 个答案:

答案 0 :(得分:2)

问题是在代码运行时,页面上没有.menu8元素。这可能是因为它还没有尚未,或者因为你根本没有在页面上放置一个。

如果此代码在页面加载时运行,并且您确实在HTML中定义了具有类menu8的元素,那么将该代码移动到页面底部的script标记中您的DOM元素已经定义,以便在代码运行时它们就在那里。

,例如,这将失败:

<script src="yourcode.js"></script>
<!-- ... -->
<li class="menu8"></li>

但这会奏效:

<li class="menu8"></li>
<!-- ... -->
<script src="yourcode.js"></script>

这是通常建议的一个原因,除非您有充分的理由不这样做,请将您的脚本放在页面底部,紧接在结束</body>标记之前。

(如果您的代码稍后添加了.menu8元素,那么您必须在添加之后使用运行代码。)

如果您无法控制script元素的去向,那么您可以将代码包装在&#34; ready&#34;处理程序:

$(document).ready(function() {
    // your code here
});

或其快捷版:

$(function() {
    // your code here
});

但如果您控制script代码的去向,就没有必要。