2017-08-01 12 views
0

ご質問に誤解を招いて申し訳ありませんが、 質問を修正してください。jQuery正規表現でURLフォルダ名を置き換える方法は?

すべて私は文字列内のすべてのURLフォルダ名を置き換えることができるjQuery/JavaScript関数が必要です。たとえば、(zh-hantからzh-hansへ);

<a href="http://somedomain.com/zh-hant/folder1/folder2">http://somedomain.com/zh-hant/folder1/folder2</a> 

私は以下のコードが、無使用を試みた

<a href="http://somedomain.com/zh-hans/folder1/folder2">http://somedomain.com/zh-hans/folder1/folder2</a> 

に変更します。それらのどれも変更されていません。

var fromStr = '<a href="http://somedomain.com/zh-hant/folder1/folder2">http://somedomain.com/zh-hant/folder1/folder2</a>';  
var str = fromStr.replace(/\*zh-hant*/g, 'zh-hans'); 

助けてもらえますか? ありがとうございました。

+1

を更新するには?フォルダ名に '*'はありません。 – Barmar

答えて

0

最初に、val()はフォーム要素(テキスト入力など)でのみ機能します。代わりに、要素内のテキストを変更するにはtext()メソッドを使用する必要があります。

第2に、jQueryのval()text()の両方のメソッドは、引数なしで呼び出したときに値/テキストを取得し、文字列を渡すときに値/テキストを設定します。値をインプレースで更新することはできません。したがって、値を取得して置き換えた後は、再度val()メソッドを使用して要素に戻す必要があります。

var str = $(this).val().replace(/\*zh-hant*/g, 'zh-hans'); 
$(this).val(str); 

これはさらにに短縮することができます。

$this.val($(this).val().replace(/\*zh-hant*/g, 'zh-hans')); 
+0

@Barmar私はそれが途中で実現したことを認識し、更新しています。 – Soviut

0

使用正規表現/zh-hant/gなどコアJS hrefinnerText性質、

$('a').each(function() { 
 
    this.href = this.href.replace(/zh-hant/g, 'zh-hans'); 
 
    this.innerText = this.innerText.replace(/zh-hant/g, 'zh-hans'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a href="http://somedomain.com/zh-hant/folder1/folder2">http://somedomain.com/zh-hant/folder1/folder2</a>

+1

また、 '.attr( 'href')' – Barmar

+0

はい@Barmar、私は自分の答えを更新していました、 'href'と' innerText'は 'text()'と 'attr()'を使うよりも高速です。右? –

0

あなたはURLを渡しますURLの.pathnameを取得するURLコンストラクタに、"/zh-hans"

var a = document.querySelector("a"); 
 
var url = new URL(a.href); 
 
var res = url.origin + url.pathname.replace(/\/zh-hant/, "zh-hans"); 
 
a.href = a.textContent = res; 
 
console.log(a.href);
<a href="http://somedomain.com/zh-hant/folder1/folder2">http://somedomain.com/zh-hant/folder1/folder2</a>

0

<a>"/zh-hant"を置き換えるためにRegExp/^\/zh-hant/を使用する要素は値を持ちません。テキストとそれに置き換える必要があります。href属性正規表現にも間違いがあります。正確なテキストにマッチしているだけなので、正規表現は本当に必要ありません。

var newURL = $(this).attr('href').replace('zh-hant', 'zh-hans'); 
$(this).text(newURL).attr('href', newURL); 
+0

'zh-hant'がURLの他の部分にも含まれている場合(ドメイン名の一部など)はどうなりますか? – guest271314

+1

これは、最初のマッチを置き換えます。これを解決するには、URLのより複雑な解析が必要です。 – Barmar

0

あなたは使用text()またはhtml()の代わりval()を更新するには...

<a>タグを更新していません。フォーム要素には.val()が使用されます。

$(this).text($(this).text().replace(/\*zh-hant*/g, 'zh-hans')); 

あなたが正規表現に `` \ *なければならないのはなぜhref

$(this).attr('href', $(this).attr('href').replace(/\*zh-hant*/g, 'zh-hans')); 
0

var $a = $(this); 
 
var str = $a.text().replace(/zh-hant/g, 'zh-hans'); 
 

 
$a.attr("href", str).text(str);

関連する問題