编辑HTML字符串中的属性值

时间:2012-11-16 16:41:33

标签: javascript jquery

所以,我有一个字符串。该字符串包含html。我正在检查字符串中的'name',如果它没有我在那里使用偷偷摸摸的那个,如果它确实我需要改变它是什么。

var myString = '<input id="accountUser_c967817c993e62b1de50e4f0401a03ae" type="hidden" value="c967817c993e62b1de50e4f0401a03ae" name="addRow[]"><div class="colors goldbluegreenorange"></div>';
if (myString.indexOf('name') == -1) {
    myString = myString.substr(0,myString.indexOf('>')) + ' name="addRow[]"' + myString.substr(myString.indexOf('>'));
} else {
    //get what's inside name's quotes and change it to removeRow[]. 
}

我也有jquery,如果这比直接的javascript更有意义。

5 个答案:

答案 0 :(得分:2)

既然你正在使用jQuery,为什么不用该字符串创建一个jQuery元素,这样我们可以使用jQuery的漂亮API呢?它会使它比原始字符串操作更不容易出错。

以下是一些示例代码:

var $element = $('<input id="accountUser_c967817c993e62b1de50e4f0401a03ae" type="hidden" value="c967817c993e62b1de50e4f0401a03ae" name="addRow[]"><div class="colors goldbluegreenorange"></div>');

$element.filter('input').prop('name', function(i, v) {
    return v ? 'removeRow[]' : 'addRow[]';
});

注意:该函数中的vname属性的当前值,jQuery会自动将其传递给回调函数。返回值是应该更新属性的值。


更新:如果您想将其全部转换回字符串,请使用以下命令:

var theHTMLstring = $element.wrapAll('<div>').parent().html();

这是小提琴:http://jsfiddle.net/kBF3c/

答案 1 :(得分:0)

为什么不使用jQuery的内置功能。

演示 here

// specify string representing input element
var str = '<input id="accountUser_c967817c993e62b1de50e4f0401a03ae" type="hidden" value="c967817c993e62b1de50e4f0401a03ae" name="addRow[]"><div class="colors goldbluegreenorange"></div>';

var els = $(str);
// create element
var el = $(els).filter("input");

if( $(el).prop("name") ) {
    $(el).prop( "name", "removeRow[]" );
} else {
    $(el).prop("name", "anynameyouwant");​​​​​​​​​​​​​​
}

我猜您需要将上述元素添加到DOM中,您可以这样做

$("#parentId").append( els );

答案 2 :(得分:0)

尝试将字符串转换为jQuery对象并从中读取参数:

var myString = '<input id="accountUser_c967817c993e62b1de50e4f0401a03ae" type="hidden" value="c967817c993e62b1de50e4f0401a03ae" name="addRow[]"><div class="colors goldbluegreenorange"></div>';
var $input = $(myString).filter('input');
$input.attr('name') = ($input.attr('name') == "") ? 'addRow[]' : 'removeRow[]';

答案 3 :(得分:0)

既然您正在使用jQuery,为什么不只是解析字符串并将标记视为HTML?

var html = $.parseXML(string);
$.each(html.find('*'),function()
{
    if ($(this).attr('name'))
    {
        $(this).attr('name', 'addRow[]');
    }
    else
    {
        $(this).attr('name','removeRow[]');
    }
});

从那里拿东西?

答案 4 :(得分:0)

你可以试试这个

var str = '<input id="accountUser_c967817c993e62b1de50e4f0401a03ae" type="hidden" value="c967817c993e62b1de50e4f0401a03ae" name="addRow[]"><div class="colors goldbluegreenorange"></div>';
$(str).prop('name', (!$(str).prop('name') ? "addRow[]" : "removeRow[]"));
str=$('<div/>').html(obj).html(); // str contains new value 

DEMO