在cup[number][9]
中:
//ws-na.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&OneJS=1&Operation=GetAdHtml&MarketPlace=US&source=ac&ref=tf_til&ad_type=product_link&tracking_id=nameid-20&marketplace=amazon®ion=US&placement=B004BCXAM8&asins=B004BCXAM8&linkId=SK5UG2J5CK4WNOKE&show_border=true&link_opens_in_new_window=true
这是我的代码:
var str = cup[number][9];
str=str.replace('amazon®ion','amazon®ion');
amazon®ion
未被替换。这段代码有什么问题?
更新
解决:
var str = escape(cup[number][9]);
str=str.replace('amazon%AEion','amazon%26ampregion');
str=unescape(str);str=str.replace('ampregion','region');
答案 0 :(得分:2)
我猜你在看cup[number][9]
并且发现它没有改变。这是因为您只修改了str
变量的值,而不是cup[number][9]
。
由于您将str
重新分配给全新字符串,因此不会影响str
过去指向的对象。
当您处理面向对象的代码时,必须小心这个概念。如果你有两个指向同一个对象的变量,重新分配其中一个变量将不会重新分配另一个变量。
修改强>
这里有一些代码。让我们删除该字符串中的一些令人分心的东西,然后执行以下操作:
var number = 0;
var cup = [];
cup[number] = [];
cup[number][9] = "marketplace=amazon®ion";
var str = cup[number][9];
str=str.replace('amazon®ion','amazon®ion');
console.log(cup[number][9]);
console.log(str);
这将为您提供以下输出:
marketplace=amazon®ion
marketplace=amazon®ion
如果您正在查看cup[number][9]
,则会看到原始字符串。如果您查看str
,您会看到新字符串,因为str
是唯一获得新值的内容。
如果你想修改数组中的值,你必须直接重新分配它,你可以跳过整个str
部分:
cup[number][9] = cup[number][9].replace('amazon®ion','amazon®ion');
console.log(cup[number][9]);
现在它将有你的新价值。
答案 1 :(得分:1)
<强>更新强>
var str = encodeURI(cup[number][9]);
str = decodeURI( str.replace( encodeURI('amazon®ion'), encodeURI('amazon&region') );
encodeURI()&amp; decodeURI()强>
encodeURI('amazon®ion')
您无需猜测编码字符&
中的amazon®ion
需要采用&
的形式,如下所示:amazon&region
decodeURI()
来使用新URI JsFiddle:http://jsfiddle.net/cbsL9ed7/2/
为什么不把它变成一个功能?
function updateURI(uri, oldValue, newValue) {
var str = encodeURI( uri );
str = decodeURI( str.replace( encodeURI(oldValue), encodeURI(newValue) ) );
return str;
}
var newURI = updateURI(cup[number][9], 'amazon®ion', 'amazon&region');
document.write( newURI )
jsFiddle:http://jsfiddle.net/cbsL9ed7/4/
答案 2 :(得分:0)
替换它时必须使用URL编码语法:
str=str.replace('amazon®ion','amazon&region');
这是一个JSFiddle https://jsfiddle.net/sqqfrgb0/1/
尽管有效的语法是®
,但它仍然将其识别为®
,因此您需要替换为&
而不是&
< / p>