Обход дочерних узлов xml с помощью jquery

#javascript #jquery #dom

#javascript #jquery #dom

Вопрос:

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

У меня есть приведенный ниже XML-объект в моей переменной javascript с именем «detailJSTotal».

 <response>
<div>
    <p>
        <label>
            ID:
        </label>
        812161
    </p>
    <p>
        <label>
            Name:
        </label>
        252
    </p>
    <a href="javascript:void(0)" onclick="text4.xml">
        more...
    </a>
</div>
<div>
    <p>
        <label>
            ID:
        </label>
        812162
    </p>
    <p>
        <label>
            Name:
        </label>
        252
    </p>
    <a href="javascript:void(0)" onclick="test2.xml">
        more...
    </a>
</div>
<div>
    <p>
        <label>
            ID:
        </label>
        812163
    </p>
    <p>
        <label>
            Name:
        </label>
        252
    </p>
    <a href="javascript:void(0)" onclick="text.xml">
        more...
    </a>
</div>
<div>
    <p>
        <label>
            ID:
        </label>
        812164
    </p>
    <p>
        <label>
            Name:
        </label>
        252
    </p>
    <a href="javascript:void(0)" onclick="test1.xml">
        more...
    </a>
</div>
  

Здесь корневой элемент (ответ) содержит несколько элементов < div> . Каждый элемент < div> содержит элемент < label>, его значение и элемент < a>.

Мое требование — получить значение атрибута элемента <a> «onclick» для заданного значения <label > ‘ID’ элемента <div>.

Пример:

Возможно, я захочу получить значение атрибута «onclick» элемента < a >, указав значение ID <label > как ‘812161’ . Возвращаемое значение должно быть «text4.xml » в приведенном выше примере.

Ответ №1:

Просто загрузите свой xml с помощью jQuery:

 var $xml = $(detailJSTotal);
  

Теперь вы можете использовать jQuery для всех функций jQuery и выбирать всю необходимую информацию.
Например, используйте find() :

 var $label = $xml.find('label:contains("test")');
return $label.next('a').attr('onclick');
  

Примечание: Непроверенный и просто написанный из моей головы.

Комментарии:

1. Спасибо Дарио.. Вы вселили уверенность в мою надежду, что это можно сделать таким образом. Приведенный ниже ответ точно подходит и работает для моего требования.

Ответ №2:

Попробуйте Jquery xmlParser ; вот так

 var detailJSTotal= `<response>
<div>
    <p>
        <label>
            ID:
        </label>
        812161
    </p>
    <p>
        <label>
            Name:
        </label>
        252
    </p>
    <a href="javascript:void(0)" onclick="text4.xml">
        more...
    </a>
</div>
<div>
    <p>
        <label>
            ID:
        </label>
        812162
    </p>
    <p>
        <label>
            Name:
        </label>
        252
    </p>
    <a href="javascript:void(0)" onclick="test2.xml">
        more...
    </a>
</div>
<div>
    <p>
        <label>
            ID:
        </label>
        812163
    </p>
    <p>
        <label>
            Name:
        </label>
        252
    </p>
    <a href="javascript:void(0)" onclick="text.xml">
        more...
    </a>
</div>
<div>
    <p>
        <label>
            ID:
        </label>
        812164
    </p>
    <p>
        <label>
            Name:
        </label>
        252
    </p>
    <a href="javascript:void(0)" onclick="test1.xml">
        more...
    </a>
</div></response>`;
  xmlDOM = $( $.parseXML( detailJSTotal) );
function getAttrForID(id){
  console.log($($(xmlDOM).find("p:contains("   id   ")").siblings("a")[0]).attr("onclick"));
  return $($(xmlDOM).find("p:contains("   id   ")").siblings("a")[0]).attr("onclick");
}

console.log(getAttrForID("812161"));  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>  

Комментарии:

1. Привет, мы можем сделать что-то вроде приведенного ниже. В моем случае это ограничено использованием цикла.

2. Тогда какой тип возвращаемого значения вам требуется?

3. Вам нужен только первый идентификатор всего ответа?

4. @santoshM понял тебя :), теперь используй эту getAttrForID функцию get Attr для заданного идентификатора

5. Дайте мне знать ваши фактические требования? Вам нужен обход без зацикливания?