Проверьте, существует ли узел XML по значению с помощью JQuery - PullRequest
2 голосов
/ 17 сентября 2009

Я пытаюсь проверить, существует ли значение в узле xml, используя Jquery. Строка xml:

        <SectionAnswers>
            <SectionAnswer>
                <detailID>2216</detailID>
                <SourceAnswerID>979</SourceAnswerID>
            </SectionAnswer>
            <SectionAnswer>
                <detailID>2218</detailID>
                <SourceAnswerID>981</SourceAnswerID>
            </SectionAnswer>
            <SectionAnswer>
                <detailID>2219</detailID>
                <SourceAnswerID>977</SourceAnswerID>
            </SectionAnswer>
            <SectionAnswer>
                <detailID>2221</detailID>
                <SourceAnswerID>980</SourceAnswerID>
            </SectionAnswer>
            <SectionAnswer>
                <detailID>2282</detailID>
                <SourceAnswerID>64</SourceAnswerID>
            </SectionAnswer>
            <SectionAnswer>
                <detailID>2283</detailID>
                <SourceAnswerID>978</SourceAnswerID>
            </SectionAnswer>
            <SectionAnswer>
                <detailID>2596</detailID>
                <SourceAnswerID>73</SourceAnswerID>
            </SectionAnswer>
        </SectionAnswers>

Когда я пытаюсь запросить его для значения, используя следующее:

$ ("SectionAnswers", Section) .find ("64") // Раздел - это контекст jquery

Я получаю следующий ответ:

Выражение не возвращает узел DOM.

// -.> 64 <- </p>

Есть идеи, где я ошибаюсь? Я действительно не хочу проходить через них, проверяя значение каждый раз, как в $ ("SectionAnswers", Section) .each ()

Спасибо

Ответы [ 4 ]

4 голосов
/ 17 сентября 2009

Попробуйте просмотреть XML, используя простой $ .each:

$('SectionAnswers > SectionAnswer').each(function() {
    if($(this).find('SourceAnswerID').text() == '64') {
        alert('Found 64 at detailID: ' + $(this).find('detailID').text());
    }
});

или фильтр :

var $sa = $('SectionAnswers > SectionAnswer').filter(function() {
    return $(this).find('SourceAnswerID').text() == '64'; 
});
alert($sa.find('SourceAnswerID').text());
alert($sa.find('detailID').text());
1 голос
/ 17 сентября 2009

Я оставляю это здесь для справки, так как это может быть полезно в немного других обстоятельствах, но, как упоминалось в karim79, оно соответствует всему, что имеет подстроку 64.


Вы должны иметь возможность использовать псевдо-селектор ": содержит (текст)" :

$("SectionAnswers SourceAnswerID:contains('64')", Section)

Это выберет элементы SourceAnswerID, поэтому вам может понадобиться использовать функцию parent() или closest() для перемещения вверх по иерархии.

0 голосов
/ 18 сентября 2009

ОК получил исправление. Я закончил тем, что изменил xml, чтобы сделать атрибуты идентификаторов так, чтобы это было

        <SectionAnswers>
            <SectionAnswer SourceAnswerID="1487"
                           detailID="1420" />
            <SectionAnswer SourceAnswerID="1488"
                           detailID="2039" />
        </SectionAnswers>

И теперь я могу найти его через

находка ( "SectionAnswer [SourceAnswerID = 1487]")

В любом случае, это лучшее решение, поскольку размещение информации в атрибутах сокращает размер возвращаемого значения.

0 голосов
/ 18 сентября 2009

Спасибо, ребята.

Я поиграю с обоими из них и посмотрю, что я могу придумать. Я хочу избежать цикла, если это возможно, потому что он уже будет работать внутри цикла, и у меня просто есть кнопка с вложенными циклами ...

Но теперь, когда я думаю об этом ... И фильтр, и вызовы в любом случае внутренне являются циклами ... Так что на самом деле он мог бы работать лучше, если просто получить коллекцию и выполнить итерацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...