【问题标题】:Why is there a space required in between the end of my selector and the ending quote?为什么在我的选择器结尾和结尾引号之间需要一个空格?
【发布时间】:2014-05-13 00:05:21
【问题描述】:

代码中的注释显示了选择器后面的空格位置。如果我在结束引号之前删除空格,代码会中断,我不明白为什么。有人可以解释一下吗?谢谢。

<script type="text/javascript">

    $("document").ready(function() {    
        buildBookmarks('h3', 'header'); 
    }); 

    function buildBookmarks(strWhichTag, sBookMarkNode) {

        var cAnchorCount = 0;
        var oList = $("<ul id='bookmarksList'>"); 

下面是结束后的空格)

        $("div:not([id=header]) " + strWhichTag).each(function() {
            $(this).html("<a name='bookmark" + cAnchorCount + "'></a>" + $(this).html());
            oList.append($("<li><a href='#bookmark" + cAnchorCount++  + "'>" + $(this).text() + "</a></li>"));
        });

        $("#" + sBookMarkNode).append(oList);
    }
</script>

【问题讨论】:

  • 需要的空间,究竟在哪里?
  • 这段代码没有注释。
  • "div:not([id=header]) "
  • 那么你想知道"div:not([id=header])h3""div:not([id=header]) h3"之间的区别吗?
  • 这取决于strWhichTag的值,问题中没有透露。

标签: javascript jquery html jquery-selectors string-concatenation


【解决方案1】:

显然strWhichTag 包含另一个选择器,当这两个选择器字符串连接时,它表示div:not(...) 的子代。

例如,考虑div.foo(类名为“foo”的div)和div .foo(类名为“foo”的元素,它是div的子元素)之间的区别

【讨论】:

    【解决方案2】:

    根据 W3C:

    一个后代选择器由两个或多个用空格分隔的选择器组成。当元素 B 是某个祖先元素 A 的任意后代时,“A B”形式的后代选择器匹配。

    http://www.w3.org/TR/CSS2/selector.html#descendant-selectors

    如果strWhichTagdiv:not([id=header]) 的子级,则两者之间必须有空格。

    【讨论】:

      猜你喜欢
      • 2020-06-14
      • 1970-01-01
      • 2020-02-15
      • 2010-11-07
      • 1970-01-01
      • 2011-01-03
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多