如何使用jQuery从html字符串中提取多个部分?

时间:2010-11-13 01:30:58

标签: javascript jquery arrays string

这是my other question更具体的问题。

我需要从这个表格行中提取部分..

<tr><td colspan="7"><a href="http://link/index.php?view=page&id=2961" target="_blank" title="title">atext1 atext2</a> - stuff 2 - <img src="img/icon_1.gif" class="icon" title="icon1" />12 - <img src="img/icon_2.gif" class="icon" title="icon2" />4 - <span title="long title"><img src="img/icon_3.gif" class="icon" /> stuff 5 </span></td></tr>

..所以我最终得到了一个像这样的数组(或对象):

var data = [
 'id' = 2961,
 'text' = 'stuff 2',
 'link' = '<a href="http://link/index.php?view=page&id=2961" target="_blank" title="title">atext1</a>',
 'icon1' = '<img src="img/icon_1.gif" class="icon" title="icon1" />12',
 'icon2' = '<img src="img/icon_2.gif" class="icon" title="icon2" />4',
 'icon3' = '<img src="img/icon_3.gif" class="icon" title="stuff 5: long title" />'
];

到目前为止,我只能获得身份证明。我尝试将td.html()值与var tdspilt = $('td', tr).html().split(' - ');分开,但这会产生2个问题。 1)tdsplit array上的jquery函数丢失,2).html()&替换为&amp;

var tr = 'above tr row';
var data = [];
data['id'] = $('td', tr).eq(0).find('a').attr('href').match(/view=page&id=([0-9]+)/)[1];

我怎样才能得到理想的结果?

1 个答案:

答案 0 :(得分:2)

这是一个jsFiddle:http://jsfiddle.net/elektronikLexikon/tH6Yq/

该链接与预期的链接完全相同,即使它是红色的,但我不知道为什么。

jQuery.fn.outerHTML = function(s) {
    return (s) ? this.before(s).remove() : jQuery("<p>").append(this.eq(0).clone()).html();
}
function escapeRegExpStr(str){
  return str.replace(/[\[\]\\{}()+*?.$^|]/g, function(m){return '\\'+m;});
}

data['id'] = $('td', tr).eq(0).find('a').attr('href').match(/view=page&id=([0-9]+)/)[1];

data['link'] = $('a', tr).eq(0).outerHTML();
data['text'] = $('td', tr).eq(0).html().match(new RegExp(escapeRegExpStr(data['link'])+" - (.*?) - ", ''))[1];

data['link'] = data['link'].replace(escapeRegExpStr($('a', tr).eq(0).html()), $('a', tr).eq(0).html().match(/(.*?) /)[1]);

data['icon1'] = $('img', tr).eq(0).outerHTML();
data['icon1'] += $('td', tr).eq(0).html().match(new RegExp(escapeRegExpStr(data['icon1'])+"(.*?) - ", ''))[1];

data['icon2'] = $('img', tr).eq(1).outerHTML();
data['icon2'] += $('td', tr).eq(0).html().match(new RegExp(escapeRegExpStr(data['icon2'])+"(.*?) - ", ''))[1];

data['icon3'] = $('img', tr).eq(2).outerHTML();
icon3title = $.trim($('td', tr).eq(0).html().match(new RegExp(escapeRegExpStr(data['icon3'])+"(.*?)\s*<\/span>", ''))[1]) + ": " + $('span:last', tr).attr("title");
data['icon3'] = data['icon3'].replace(/>/, ' title="' + icon3title + '">');