Log in

View Full Version : Clever Javascript alteration?



divtag32
08-14-2006, 08:19 AM
Ok I've got the code below from a site for generating a breadcrumb script for users based upon the directory they're in.

However I've got some directories where there needs to be more than one word in the name and this causes problems because it looks a little untidy.

So if the directory name is "Directory_A" would it be possible to code it so if an _ exists in the directory name, convert it to a space (ie %20)?


var crumbsep = " > ";
var precrumb = "<span class=\"crumb\">";
var postcrumb = "</span>";
var sectionsep = "/";
var rootpath = "/"; // Use "/" for root of domain.
var rootname = "Home";

var ucfirst = 1; // if set to 1, makes "directory" default to "Directory"

var objurl = new Object;
objurl['topics'] = 'All Topics';

// Grab the page's url and break it up into directory pieces
var pageurl = (new String(document.location));
var protocol = pageurl.substring(0, pageurl.indexOf("//") + 2);
pageurl = pageurl.replace(protocol, ""); // remove protocol from pageurl
var rooturl = pageurl.substring(0, pageurl.indexOf(rootpath) + rootpath.length); // find rooturl
if (rooturl.charAt(rooturl.length - 1) == "/") //remove trailing slash
{
rooturl = rooturl.substring(0, rooturl.length - 1);
}
pageurl = pageurl.replace(rooturl, ""); // remove rooturl fro pageurl
if (pageurl.charAt(0) == '/') // remove beginning slash
{
pageurl = pageurl.substring(1, pageurl.length);
}

var page_ar = pageurl.split(sectionsep);
var currenturl = protocol + rooturl;
var allbread = precrumb + "<a href=\"" + currenturl + "\">" + rootname + "</a>" + postcrumb; // start with root

for (i=0; i < page_ar.length-1; i++)
{
var displayname = "";
currenturl += "/" + page_ar[i];
if (objurl[page_ar[i]])
{
displayname = objurl[page_ar[i]];
}
else
{
if (ucfirst == 1)
{
displayname = page_ar[i].charAt(0).toUpperCase() + page_ar[i].substring(1);
}
else
{
displayname = page_ar[i];
}
}
allbread += crumbsep + precrumb + "<a href=\"" + currenturl + "\">" + displayname + "</a>" + postcrumb;
}
document.write(allbread);

jscheuer1
08-14-2006, 08:34 AM
I'd just put this:


allbread=allbread.replace(/_/g, ' ');

right before this:


document.write(allbread);

Twey
08-14-2006, 08:36 AM
A note:
var pageurl = (new String(document.location));is far less efficient than:
var pageurl = document.location.href;

jscheuer1
08-14-2006, 08:44 AM
Then again not! I just tried it out and it will give the wrong href, so what you really need to do instead is change the 'displayname' here (addition red):


allbread += crumbsep + precrumb + "<a href=\"" + currenturl + "\">" + displayname.replace(/_/g, ' ') + "</a>" + postcrumb;

Added Later - Important Note: I agree with Twey about location.href, I am disagreeing with my own earlier advice in this thread.