#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. Дайте мне знать ваши фактические требования? Вам нужен обход без зацикливания?