Предполагая, что ваша строка является допустимым HTML, вы можете сделать что-то вроде этого:
Попробуйте: http://jsfiddle.net/WsDTL/2/ (обновлено с оригинала для использования .each()
вместо .map()
во избежание использования .split()
)
var string = "sdsds<div>sdd<a href='http://google.com/image1.gif'>image1</a> sd</div>sdsdsdssssssssssssssssssssssssssssssssssss <p> <a href='some/href'></a> sdsdsdsds </p>sdsds<div>sdd<img src='http://google.com/image1.gif' alt='car for family' /> sd</div>";
var $container = $('<div/>').html(string);
var result = [];
$container.find('a,img').each(function() {
if(this.tagName.toUpperCase() == 'A') {
if($.trim( this.innerHTML ) != '') {
result.push([this.tagName,this.innerHTML,this.href]);
}
} else {
result.push([this.tagName,this.src,this.alt]);
}
});
alert(result);
РЕДАКТИРОВАТЬ:
Если вы имели в виду, что вы нене хотите обрабатывать <a>
, если у него нет атрибута href
, затем измените код на следующий:
$container.find('a[href],img').each(function() {
if(this.tagName.toUpperCase() == 'A') {
result.push([this.tagName,this.innerHTML,this.href]);
} else {
result.push([this.tagName,this.src,this.alt]);
}
});
РЕДАКТИРОВАТЬ:
Для хранения, как в вашем комментарии, вы должны сделать results
объектом javascript и хранить массивы под клавишами links
и images
.
var string = "sdsds<div>sdd<a href='http://google.com/image1.gif'>image1</a> sd</div>sdsdsdssssssssssssssssssssssssssssssssssss <p> <a href='some/href'></a> sdsdsdsds </p>sdsds<div>sdd<img src='http://google.com/image1.gif' alt='car for family' /> sd</div>";
var $container = $('<div/>').html(string);
// store results in a javascript object
var result = {
links:[],
images:[]
};
$container.find('a[href],img').each(function() {
if(this.tagName.toUpperCase() == 'A') {
result.links.push([this.tagName,this.innerHTML,this.href]);
} else {
result.images.push([this.tagName,this.src,this.alt]);
}
});
alert(result.links);
alert(result.images);
Вы можете сделать 2 отдельныхпетли, если вы предпочитаете.Не уверен, что будет лучше.
http://jsfiddle.net/WsDTL/3/