Будет полезен пример структуры XML.
Я не думаю, что вы можете достичь того же с помощью одного селектора, вам нужно использовать более сложную структуру:
$(XMLObj).find('Album').filter(function() { // filter albums by album number
return !!$(this).find('AlbumNo').filter(function() {
return $(this).text() == AlbumNo;
}).length;
}).find('Track').filter(function() { // filter tracks by track number
return !!$(this).find('TrackNo').filter(function() {
return $(this).text() == TrackNo;
}).length;
});
Было бы определенно проще, если бы числа были атрибутами элементов, а не потомками.
Причина, по которой я использую другую filter
функцию вместо :contains
, заключается в том, что это единственный способ поискадля точного соответствия.:contains
также будет соответствовать, если текст, который вы ищете, будет только подстрокой .То есть, если вы ищете номер дорожки 1
, :contains
также будет соответствовать номеру дорожки 10
, 11
, 12
и т. Д.
Если вам нужно сделать подобноедовольно часто, может быть полезно расширить jQuery функцией, которая фильтрует элементы с определенными подэлементами с определенным содержимым.
Например:
(function($) {
$.fn.whichContains = function(element, content) {
return this.filter(function() {
return !!$(this).find(element).filter(function() {
return $(this).text() == content;
}).length;
});
};
}(jQuery));
, который можно использовать как
$(XMLObj)
.find('Album').whichContains('AlbumNo', AlbumNo)
.find('Track').whichContains('TrackNo', TrackNo)