I'm using Sharepoint Design with the code below inserted in content webpart.
The code lists files and folders with SPServices of a library and shows a PDF
if a link was clicked. In my library PDFLibrary
, I have some folders, and
each folder has some files inside. The code works well, but my problem now is
how do I show these menus with an accordion effect?
I purposely generated the folder names between h3 tags, but I need a delimiter on each link groups:
h3 PDF Folder1 /h3
div
link file1
link file2
link file3
/div
In this way, in my code, when I try to insert a div before the links, the browser immediately closes it:
h3 PDF Folder1 /h3
div /div (<= HERE IS WRONG!)
link file1
link file2
link file3
The solution I found is to insert another webpart with the accordion code after the page is fully loaded, but this is not ideal.
Is a dynamically inserted div not possible?
Here is my code:
<script type="text/javascript" src="/Scripts/pdfobject.js"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function () {
// var to generate ids for each element of list
var _id = 1;
$().SPServices({
operation: "GetListItems",
listName: "PDFLibrary",
completefunc: function (xData, Status) {
$(xData.responseXML).find("z\\:row, row").each(function() {
//take the type of object. 1 = folder / 0 = file
var thisFSObjType = $(this).attr("ows_FSObjType").split(";#")[1];
if(thisFSObjType == 1) {
//mount the string to get the current folder
var _initialString = "<QueryOptions><Folder>PDFLibrary/";
var _folderName = $(this).attr("ows_LinkFilename");
var _finalString = "</Folder></QueryOptions>"
var _CAMLQueryString = _initialString + _folderName + _finalString;
//print the current folder on div
$("#pdflist").append(_folderName).append("<br/>");
//this function lists the files inside the current folder
$().SPServices({
operation: "GetListItems",
async: false,
listName: "PDFLibrary",
CAMLQueryOptions: _CAMLQueryString,
completefunc: function (xData, Status) {
$(xData.responseXML).find("z\\:row, row").each(function () {
var _url = 'http://mysite.org/' + $(this).attr("ows_FileRef").split(";#")[1];
var _title = $(this).attr("ows_LinkFilename");
var _link = $("<a href='" + _url + "'" + "id='" +_id + "'" + "/>");
$(_link).append(_title);
$("#pdflist").append(_link).append("<br/>");
// set id to current file
var idpdf = "#" + _id;
// load file into pdfview div
$(idpdf).click(function(event){
event.preventDefault();
var myPDF = new PDFObject({
url: $(this).attr('href'),
pdfOpenParams: {
navpanes: 1,
view: "FitV",
pagemode: "thumbs"
}
}).embed("pdfview");
});
_id = _id + 1;
});
$("#pdflist").append("<br/>");
}
});
}
});
}
});
});
</script>
You may want to check my API to deal with Sharepoint: SharepointPlus, and especially the $SP().list().get() with the
folderOptions
. It will make your code way simplier :-)Regarding your question, it's not really clear. When you said "the browser immediately closes it", what is closed? You can, of course, add a DIV in your DOM with no problem.
However, here, the thing you want to achieve seems to be only visual. It means you could use CSS to do it, couldn't you?
I guess we miss too many things in the code you provided to help you. I don't see anywhere the inserted
H3
. What is#pdflist
? Where in your code are you trying to insert theDIV
? How looks like your HTML code before and after?Also you can refactor the below code:
To:
Sorry but it's difficult to help with this amount of information.