-1

文字列の内容:

background:url(abcd.gif); background:url(images/header2.gif) no-repeat;
background:url(images/bullet1.gif) no-repeat 11px 13px;

Javascript コード :

var testRE = originalcode.match("url\(\(.*)\)"); 
testRE = testRE[2].replace('(',''); 
testRE = testRE.split(')')[0]; 
var img_path = "http://xyz.com/800002418/"+testRE; 
originalcode = originalcode.replace(testRE,img_path);

上記のコードでは、一致の最初のインスタンスのみを置き換えています。上記のように文字列内の url の複数のインスタンスを置き換えようとしていますが、url の文字列内に 3 つのインスタンスがあります。ただし、最初のインスタンスを置き換えるだけで、「abcd.gif」を「http://xyz.com/800002418/abcd.gif」に置き換えます。そして休みはそのまま。

4

2 に答える 2

1

ここで実際にやろうとしていることは次のとおりだと思います。

originalcode = originalcode.replace(/url\(([^\)]*)\)/g, "url(http://xyz.com/800002418/$1)");
于 2013-06-24T13:16:32.380 に答える
0

あなたがやりたいと思うことを行う方法については、@ Phylogenesisの回答を参照してください。しかし、それはあなたが本当にやりたいことですか? 文字列を変更した後、それをどうしますか? のように、何らかの要素の文字列 CSS 値として設定することになると思いますelt.cssText=。しかし、なぜ 3 つのbackgroundプロパティを連続して使用すると何か役立つことがあると思いますか? それぞれが前のものを上書きします。

一歩下がって、正規表現を使用して CSS 宣言を文字列として操作しようとする代わりに、個々のプロパティ値を操作することをお勧めします。だから、次のようなもの

foo.style.backgroundImage=foo.style.backgroundImage
    .replace(/\(.*)\)/,"http://..."+$1);

しかし、なぜあなたがこれをやりたいのか、私はまだ混乱しています。リモート URL は実行時にしか分からないからだと思いますか? 最も柔軟な解決策は、問題のホストに CSS ファイルを配置してロードすることです。画像がそこにある場合は、それらと一緒に CSS ファイルを配置できるはずです。プロパティ値の URL 参照はbackground、CSS ファイルの URL に関して自動的に解釈されます。この醜い方法で書き直す必要はありません。

于 2013-06-24T14:08:01.203 に答える