Ich hoffe, jemand kann mir helfen, es macht mich verrückt.Javascript finden und ersetzen funktioniert mit Zeichenfolge, aber nicht variabel
Ich benutze SPServices und Javascript, um einige Links nach einer kleinen Inhaltsmigration neu zu schreiben.
Ich habe einige HTML in einer Variablen und ich versuche, eine Zeichenfolge zu finden, die eine bestimmte URL ist und sie durch eine andere URL ersetzen. Dies funktioniert:
newHTML = newHTML.replace("http://urlhere/subsite/page.aspx",newLink);
Auch dies funktioniert:
newHTML = newHTML.replace(new RegExp("http://urlhere/subsite/page.aspx", 'gi'), newLink);
Aber wenn ich in eine Variable mit der gleichen Zeichenfolge haben es nicht funktioniert:
newHTML = newHTML.replace(new RegExp(oldLink, 'gi'), newLink);
Mein oldLink Die Variable kommt von einem SPServices-Aufruf zu einer anderen Listenspalte, die HTML enthält. Ich nehme die "a" -Tags und lege sie in ein Array:
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);
}
Dann rufe ich eine Funktion zum Suchen und Ersetzen der Links (das ist, wo meine Variable nicht funktioniert). Ich habe in allen Kombinationen der folgenden Weisen versucht zu entkommen:
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, '\\$&');
}
auch entfernt Punkt und Fragezeichen aus dem HTML-& variabel machen alles einfach und es funktioniert immer noch nicht.
auch versucht encodeURIComponent auf der HTML-& oldlink Variable .. noch kein Glück
Wenn jemand eine Hilfe für mich mit dieser überhaupt hat es sehr geschätzt werden würde, oder vielleicht sehen, was ich bin fehlt ?!
Dank
Könnten Sie einen Beispielwert von oldLink posten? Hier ist eine Geige, die eine Variable in einer Regex verwendet und funktioniert: https://jsfiddle.net/omers/rcm65bqo/ – omerts
Sicher! Dank .. oldLink ist sehr ähnlich wie die folgenden auch die Codierung (nach dem Entfernen und.?): Entsprechen, was die HTML von Sharepoint gezogen hat http // : someplaintext/pages/GuidelinesaspxiPageId = 14495 – cptasker
Bitte würden Sie klar Eingänge definieren und erwartete Ausgaben, um Rätselraten zu vermeiden. – 1983