jquery next() ничего не возвращает

Я пытался выбрать все между соседними <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". Почему это произошло? Как я могу сделать это лучше?


person ericcire    schedule 16.12.2012    source источник
comment
Вы спрашиваете что-то между <p>...</p> или <p>...</p>IWANTTHIS<p>...</p>   -  person bobthyasian    schedule 16.12.2012
comment
последний. первое было бы слишком просто, просто $(p).innerHTML...   -  person ericcire    schedule 16.12.2012
comment
Довольно сложно обойтись без классов или идентификаторов.   -  person bobthyasian    schedule 16.12.2012
comment
Для меня это невозможно... Целый час ломал голову.   -  person ericcire    schedule 16.12.2012
comment
Есть ли что-то еще в HTML?   -  person bobthyasian    schedule 16.12.2012
comment
@ericcire, пожалуйста, посмотрите мой обновленный ответ с обновленной скрипкой.   -  person w3uiguru    schedule 16.12.2012
comment
Вы должны были обновить пост в первый раз. Как будто вы задаете новый вопрос один за другим.   -  person w3uiguru    schedule 16.12.2012
comment
Извините, я думал, что это небольшая проблема, пока не понял, что это намного сложнее. Знаешь, это и есть нуб. Спасибо за помощь.   -  person ericcire    schedule 16.12.2012


Ответы (2)


Вы должны использовать .nextUntil("p") для этой цели! потому что .next() проверяет только следующий элемент, а nextUntil() ищет до тех пор, пока не будет найден связанный элемент!

person Muhammad Talha Akbar    schedule 16.12.2012
comment
Нет... .nextUntil(p) была моей первой попыткой, и я возвращаю список, но он не будет включать текст без тегов, который на самом деле очень важен. Я не знаю, почему серверная сторона не поместила его ни в какие теги. - person ericcire; 16.12.2012
comment
не могли бы вы кратко объяснить на простом английском языке, что вы хотите на самом деле? :) тогда мне будет легко вам помочь! - person Muhammad Talha Akbar; 16.12.2012
comment
выше скрипка получает содержимое каждого p, который содержит ABC, вы этого хотите? :) - person Muhammad Talha Akbar; 16.12.2012
comment
Я хочу это: ‹fieldset›...‹/fieldset› ‹font title=...›…‹/font› какой-то текст без тега‹br› ‹a href=...››...‹/a › //[0..N] больше тегов - person ericcire; 16.12.2012
comment
вам нужен весь html между двумя тегами p? - person Muhammad Talha Akbar; 16.12.2012
comment
вау, я понял идею, просто проверяю, работает ли она! пожалуйста, подождите некоторое время! - person Muhammad Talha Akbar; 16.12.2012
comment
Эй, кстати, я могу сделать это, заменив? я не могу найти никакого решения для этого! - person Muhammad Talha Akbar; 16.12.2012
comment
хм, это ближе. Дело в том, что я не знаю, сколько там p... И я хочу вернуть его туда, где он был, но завернутый... как в моем обновленном посте. Еще несколько шагов впереди.. - person ericcire; 16.12.2012
comment
вы хотите только тот текст, который без тегов? - person Muhammad Talha Akbar; 16.12.2012
comment
Да, именно, за исключением того, что я хочу завернуть в новый div, который я создал, как и все остальные... О, я вижу, это дочерний элемент body, поэтому я бы не получил его с помощью селектора $(p). Позвольте мне создать новый вопрос для этого. - person ericcire; 16.12.2012
comment
давайте продолжим это обсуждение в чате - person Muhammad Talha Akbar; 16.12.2012

Прочитав ваш вопрос, я получаю следующее: вам нужен контент из тега <p>... будь то контент или теги 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>
person w3uiguru    schedule 16.12.2012
comment
Ну, нет... Мне нужно что-то между этим ‹p›‹/p› и следующим ‹p›‹/p›, в данном случае ‹fieldset›, ‹font›, текст без тегов, ‹br› , ‹a› и т. д., все они. Теги ‹p›‹/p› всегда будут «ABC». - person ericcire; 16.12.2012
comment
@ericcire Уважаемый, не могли бы вы четко указать, что именно вы хотите. В моем коде все, что находится в теге ‹p›‹/p›, помещается в контейнер yh #ph. - person w3uiguru; 16.12.2012
comment
все за пределами ‹p›‹/p›, но все еще в документе. Извините за мой плохой английский. - person ericcire; 16.12.2012
comment
См. мою обновленную скрипту jsfiddle.net/dineshswami/YpYWY/3 в этом ‹p›‹ /p› trips и rest элементы html остаются такими же, как вы хотите. Тем не менее вы хотите что-нибудь еще, что вы можете спросить. - person w3uiguru; 16.12.2012