【问题标题】:Check if the child is the only content of the parent using jQuery使用jQuery检查孩子是否是父母的唯一内容
【发布时间】:2012-06-13 21:53:54
【问题描述】:

我需要检查一个链接(a-tag)是否是段落标签(p)内的唯一内容(不仅仅是唯一的孩子)。所以如果 p-tag 看起来像这样:

<p>Here we have some text inside the p-tag. Then there's <a href="#">link</a>.</p>

&lt;a&gt; 标签不是 p 标签内的唯一内容,因为还有文本。

但如果&lt;p&gt; 标签看起来像这样:

<p><a href="#">Nothing but a link inside this p-tag</a></p>

&lt;p&gt; 标签内的唯一内容是链接。

如果&lt;p&gt; 标记仅包含&lt;a&gt; 标记,我想将某个类添加到&lt;a&gt; 标记。

我正在使用此代码:

$("#MainColumn p a:only-child").addClass("singleLink");

但此代码仅检查 a-tag 是否是 p-tag 的唯一子项,而不是唯一的内容。这是我目前卡住的地方。

【问题讨论】:

    标签: jquery parent-child href


    【解决方案1】:

    只需一个选择器就可以非常简单:

    var $content = $("#MainColumn p:has(a)").filter(function() {
        return $(this).contents().length === 1;
    }).children('a').addClass("singleLink");
    

    Live DEMO

    【讨论】:

    • 这个怎么样: $("#MainColumn p:has(a:only-child)").filter(function () { return $(this).contents().length === 1; }).children('a').addClass('singleLink');当我在acual页面上运行它时它似乎工作。我只是不确定这是否是最有效的解决方案?
    • @tkahn。我的更好...:)为什么要换?
    • 我只是在想,如果我寻找只有一个子元素是 a-tag 的 p-tags,我会减少受选择器影响的元素数量,从而减少被过滤的元素数量。但也许 :only-child 伪选择器本身就是资源匮乏(?)
    • @tkahn。区别是可以忽略的,如果你在一个大循环中使用它,然后在jsperf中检查它,否则,我会选择一个,如果你也可以的话。
    • 谢谢!正如您所看到的,我将采用您的解决方案。
    【解决方案2】:

    试试这个:

      $('#MainColumn p a').each(function(){
        var p = $(this).parent().text().length;
        var s = $(this).text().length;
        if (p == s) {
            $(this).addClass('singleLink')
        }
      })
    

    http://jsbin.com/ewoqoy/2/

    【讨论】:

      【解决方案3】:

      我认为这将是您的例外

      String.prototype.startsWith = function(prefix) {
          return this.indexOf(prefix) === 0;
      }
      
      String.prototype.endsWith = function(suffix) {
          return this.match(suffix+"$") == suffix;
      };
      
      var html = $("#myP").html();
      if($("#myP p:only-child")){
      if(html.startsWith("<p>") && html.endsWith("</p>")){
      alert("hi");
      }
      }
      
      <div id="myP"><p >Sample Text inside a <b>p</b> element</p></div>
      

      【讨论】:

        【解决方案4】:

        嗯...也许您可以检查内容是否以“http://”或“www”开头:

        if($("#MainColumn p a:only-child").text().indexOf("www") != -1 {
        
        
        }
        

        因为您的链接也是“内容”,所以您无法区分“您的内容”和“无内容”。您必须说出“您的内容”是如何定义的。

        【讨论】:

        • 不——这不是我要找的。我真的不在乎 a-tag 里面有什么。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-12
        • 2012-01-28
        • 1970-01-01
        • 1970-01-01
        • 2018-08-07
        • 1970-01-01
        相关资源
        最近更新 更多