誰かがそれを助けてくれるのを助けてくれます。Javascriptの検索と置換は文字列で実行されますが、変数ではありません
小さなコンテンツの移行後にSPServicesとJavascriptを使用していくつかのリンクを書き換えています。
私は変数にいくつかのHTMLを持っており、特定のURLである文字列を見つけようとしていて、別のURLに置き換えようとしています。これは動作します:
newHTML = newHTML.replace("http://urlhere/subsite/page.aspx",newLink);
また、この作品:
newHTML = newHTML.replace(new RegExp("http://urlhere/subsite/page.aspx", 'gi'), newLink);
をしかし、私はそこに同じ文字列を含む変数を持っている場合、それは動作しません:
newHTML = newHTML.replace(new RegExp(oldLink, 'gi'), newLink);
マイoldLink変数は、 'a'タグをとり、配列に配置するHTMLを含む別のリスト列へのSPServices呼び出しから来ます。
function rewriteLinks() {
var urlStart = "http://urlstart";
var linkContainerArray = [];
var theContent = $('.htmlContentDiv').html();
// get a tags
var aTags = ('a',theContent);
//loop through A tags and get oldLink and Text
$(aTags).each(function(){
var ID;
var itemTitle = $(this).text();
var oldLink = $(this).attr('href');
var newLink;
if(itemTitle.length > 2){
//SpService call to get ID of that item using inner text as query to SharePoint list
$().SPServices({
operation: "GetListItems",
async: false,
CAMLViewFields: "<ViewFields><FieldRef Name='Title' /><FieldRef Name='ID' /></ViewFields>",
CAMLQuery: '<Query><Where><Eq><FieldRef Name="Title" /><Value Type="Text"><![CDATA['+itemTitle+']]></Value></Eq></Where></Query>',
listName: 'AGItems',
completefunc: function (xData, Status) {
$(xData.responseXML).SPFilterNode("z:row").each(function() {
ID = $(this).attr("ows_ID");
//Now have oldLink and newID in variables - build newLink from known URL & newID
newLink = urlStart+ID;
});//response xml
}//completefunc
});//spservices
//check for empty links
if((oldLink && newLink != '') && (oldLink && newLink != undefined)){
var linkPair = [oldLink,newLink];
linkContainerArray.push(linkPair);
}
}
});
replaceLinks(linkContainerArray);
}
次に、リンクを検索して置換する関数を呼び出します(これは変数が動作しない場所です)。私は、次の方法のすべての組み合わせに脱出しようとしました:
function escapeRegExp(stringToGoIntoTheRegex) {
return stringToGoIntoTheRegex.replace(/[\/\\^$*+?.|[\]{}]/g, '\\$&');
}
function htmlEncode(value){
//create a in-memory div, set it's inner text(which jQuery automatically encodes)
//then grab the encoded contents back out. The div never exists on the page.
return $('<div/>').text(value).html();
}
function htmlEscape(str) {
return String(str)
.replace(/"/g, '"')
.replace(/'/g, "'")
.replace(/</g, '<')
.replace(/>/g, '>');
}
function escapeRegExp(stringToGoIntoTheRegex) {
return stringToGoIntoTheRegex.replace(/[\/\\^$*+?.|[\]{}]/g, '\\$&');
}
はまた、すべてのものを簡単にするためにHTML &変数からの完全停止し、疑問符を削除し、それはまだ働いていません。
も...誰もがすべてでこれで私のために任意のヘルプを持っている場合は、まだ運
はそれがはるかに高く評価されないであろうか、多分私は欠けているものを見ることができますHTML & oldlink変数にencodeURIComponentでを試してみました!
おかげ
oldLinkのサンプル値を投稿できますか?ここでは正規表現で変数を使用して動作するフィドルです:https://jsfiddle.net/omerts/rcm65bqo/ – omerts
確かに!ありがとう.. oldLinkは、次のものと非常によく似ています(。と?を取り除いた後に?):SharePointを引っ張ったHTMLに一致するものがあります。 http : // someplaintext/pages/GuidelinesaspxiPageId = 14495 – cptasker
入力推測を避けるために予想される出力があります。 – 1983