【问题标题】:jquery next() returning nothingjquery next() 什么都不返回
【发布时间】:2012-12-03 16:50:18
【问题描述】:

我试图选择相邻<p> 之间的所有内容,“p”的数量每次都在变化。 p 个标签对之间的内容可能与任何事物无关。像这样的东西:

    <p><a href="x">...ABC...</a></p>

    <<<<<<<< Beginning of what I want >>>>>>>>

    <fieldset>...</fieldset>
    <font title="...">...</font>
    sometext without any tag<br>
    <a href="...">...</a>
    //[0..N] more tags

    <<<<<<<< End of what I want >>>>>>>>

    <p><a href="x+1">...ABC...</a></p>
    [0..N] more "p"'s with similar pattern ("p" with random url in "a")

更新:

我想将这些流氓代码(未标记的文本)包装到某个 div 中,以便以后处理它们。像这样:

<div id="outer">
    <div id="1">
        <p><a href="x">...ABC...</a></p>

    <! Beginning of what I want >

        <fieldset>...</fieldset>
        <font title="...">...</font>
        sometext without any tag<br>
        <a href="...">...</a>
        //[0..N] more tags

    <! End of what I want >
    </div>
    <div id="2">
        <p><a href="x+1">...ABC...</a></p>
    </div>
    <div id="3">
        //something or nothing
    </div>
    //something or nothing
</div>

为了做到这一点,我不得不使用这段代码,因为它周围有一些没有任何标签的文本:

    var ps = $("p:contains('ABC')");
    ps.each(function(){
        if(!($(this).next()[0])){
            return true;
        }
        var me = $(this);
        var pa = me.parent().contents();
        var nx = me.next("p:contains('ABC')"); //returns [] in this case
        var i0 = pa.index(me);
        var i1 = pa.index(nx);
        if (i1 > i0) {
            var elements = pa.slice(i0, i1);
            elements.each(function(){
                //Do something
            });
        }
    }); 

正如代码中所标记的,即使我将 next() 函数更改为 next("p"),它也不会返回任何内容。但是如果我使用 me.next().next().next().next().next() 我可以选择下一个“p”标签。为什么会发生这种情况?我怎样才能做得更好?

【问题讨论】:

  • 你要的是&lt;p&gt;...&lt;/p&gt;&lt;p&gt;...&lt;/p&gt;IWANTTHIS&lt;p&gt;...&lt;/p&gt;之间的东西
  • 后者。第一个太简单了,只需 $("p").innerHTML...
  • 没有类或 ID 就很难做到。
  • 对我来说这简直是不可能的事……我已经挠头好几个小时了。
  • HTML 还有更多内容吗?

标签: jquery-selectors next


【解决方案1】:

您应该为此使用.nextUntil("p")!因为 .next() 只检查下一个元素,而 nextUntil() 搜索直到找到关联的元素!

【讨论】:

  • Nah.. .nextUntil("p") 是我的第一次尝试,我返回了一个列表,但它不包括实际上非常重要的未标记文本。不知道为什么服务端没有放任何标签。
  • 你能用简单的英语简单解释一下你真正想要什么吗? :) 那我帮你很容易!
  • above fiddle 获取每个包含 ABC 的 p 的内容,这是你想要的吗? :)
  • 我想要这些:
    ...
    ... sometext 没有任何标签
    ... //[0..N] 个标签
  • 你想要两个 p 标签之间的所有 html 吗?
【解决方案2】:

阅读您的问题后,我得到的是您想要来自&lt;p&gt; 标签的内容......无论是内容还是 html 标签。如果我错了,请告诉我...

我已经创建了一个演示小提琴,请看一下。 http://jsfiddle.net/dineshswami/YpYWY/1/

更新小提琴: http://jsfiddle.net/dineshswami/YpYWY/3/

HTML:

<p><a href="x">...ABC...</a></p>


<fieldset>...</fieldset>
<font title="...">...</font>
sometext without any tag<br>
<a href="...">...</a>
//[0..N] more tags

<p><a href="x+1">...ABC...</a></p>

jquery:

$("p").contents().unwrap();    

输出:

<a href="x">...ABC...</a>


    <fieldset>...</fieldset>
    <font title="...">...</font>
    sometext without any tag<br>
    <a href="...">...</a>
    //[0..N] more tags

    <a href="x+1">...ABC...</a>

【讨论】:

  • 嗯,不...我想要的是这个

    和下一个

    之间的东西,在这种情况下,
    、未标记的文本、
    等等。

    标签中的内容将始终是“ABC”。
  • @ericcire 亲爱的,您能否明确说明您想要什么。在我的代码中,

    标记中的任何内容都会放在 yh #ph 容器中。
  • “外部”的所有内容,但仍在文档中。对不起我的英语不好。
  • 在这个

    行程中查看我更新的小提琴jsfiddle.net/dineshswami/YpYWY/3 并让 html 元素保持与您想要的相同。您仍然想要任何其他可以询问的内容。
猜你喜欢
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
  • 2018-09-10
  • 2017-02-14
  • 2013-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多