SlideShare a Scribd company logo
SharePoint Saturday New Hampshire 
The SharePoint & jQuery Guide 
Mark.Rackley@capSpire.com 
October, Twenty Fourteen
Was made possible by the generous 
support of the following sponsors… 
And by your participation… Thank you!
Join us for the raffle & SharePint following the 
last session 
Be sure to fill out your eval form & 
turn in at the end of the day for a 
ticket to the BIG raffle!
Mark Rackley / Principal Consultant 
• 20 years software architecture 
and development experience 
• SharePoint Junkie since 2007 
• Event Organizer 
(SharePointalooza.org) 
• Blogger, Writer, Speaker 
• Bacon aficionado @mrackley 
www.SharePointHillbilly.com 
www.MarkRackley.net 
www.SharePointaLooza.org
Agenda 
• What is jQuery? Why SharePoint & jQuery? 
• SharePoint and jQuery Basics 
• Deploying / Maintaining 
• Development Basics 
• Third Party Libraries 
• Examples & Demos 
The SharePoint & jQuery Guide 
http://bit.ly/jQueryAndSP
What is jQuery? 
• JavaScript Utility Library 
• jQuery() or $() 
• Allows interaction and manipulation of the DOM 
after page is rendered 
• Can interact with other systems using Web Services 
• Supported by Microsoft 
• Part of “Client Side” Development
Why SharePoint & jQuery? 
• Fewer upgrade/deployment issues 
• Rapid deployment and modifications 
• Less “customization” 
• Improved visuals 
• Improved usability
Why SharePoint & jQuery? 
• Can replace the need for Visual Studio 
• Can replace the need for basic workflows 
• No points (shhhh… don’t tell the admins) 
• You can get around the ListView Threshold 
(but should you??)
jQuery & SharePoint Basics 
• Scripts execute with same privileges as 
current user 
• Permissions cannot be elevated 
• Interact with SharePoint List data using Client 
Side Object Model (CSOM), REST, or 
SPServices
Why I Hate JavaScript & jQuery (some days) 
• Too many options 
var car = { 
color: “red”, 
make: “Jeep”, 
model: “wrangler” 
} 
var car = {}; 
car.color = “red”; 
car.make = “Jeep”; 
car.model=“wranger”; 
var car = {}; 
car[“color”] = “red”; 
car[“make”] = “Jeep”; 
car[“model”] =“wranger”;
Why I Hate JavaScript & jQuery (some days) 
• Too many options 
• Debugging is painful 
• Performance can suffer 
• Inconsistent results on different browsers 
• Constant changes in the jQuery library 
• It CAN harm your farm!
When Should You Use jQuery? 
• Tightly controlled environments 
• Visuals or Usability are high priorities 
• Tight timeframes 
• Simple page and form modifications 
 Dynamic drop downs 
 Hiding page elements 
 Reading / populating fields 
• Why would you NOT use jQuery?
When Should You Question the Use of jQuery? 
• Need pull a lot of data over the wire to work 
with 
• Iterating over many rows of list data 
• Extended business logic or proprietary 
business logic 
• Privileges need to be elevated 
• Need to support many different browsers
Deployment Options 
• Document Library 
<script type="text/javascript" src="/SiteAssets/jquery.min.js"></script> 
• File System 
<script type="text/javascript" src="/_layouts/scripts/jquery.min.js"></script> 
• Content Delivery Network (CDN) 
<script type="text/javascript" 
src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
Document Library
Reference Options 
• ScriptLink 
<SharePoint:ScriptLink runat="server" Name="/SiteAssets/jquery.min.js" 
Localizable="false"></SharePoint:ScriptLink> 
• Content Editor Web Part 
• Use the Content Link 
• Custom Action 
• Feature, Deploys to Site Collection
Custom Action 
<?xml version="1.0" encoding="utf-8"?> 
<Elements xmlns="http://schemas.microsoft.com/sharepoint/"> 
<CustomAction 
ScriptSrc="~sitecollection/SiteAssets/jquery.min.js" 
Location="ScriptLink" 
Sequence="100" 
> 
</CustomAction> 
</Elements>
A Word (or two) About MDS 
Minimal Download Strategy (MDS) 
• New in SharePoint 2013 / enabled by default 
• Reduces page load time by sending only the differences when users 
navigate to a new page. 
• https://sp_site/_layouts/15/start.aspx#/SitePages/newpage.aspx 
• Can cause scripts referenced in Custom Actions and CEWPs to not be 
loaded 
• Disable feature at site level if MDS is causing issues. Rework scripts based 
on recommendations in order to use MDS.
Development & Debugging 
• Development 
• Visual Studio 
 Web Essentials 
• SharePoint Designer 
• Notepad++ 
• Debugging 
• IE Developer Tools / Firebug 
• Fiddler 
• Alerts… alerts… alerts… 
• Avoid Console.log 
• Write scripts in small manageable chunks
jQuery Methods Commonly Used in 
SharePoint
jQuery Basics 
<script type="text/javascript"> 
$(document).ready(function($){ 
//this script executes after the page is loaded 
//if you need to interact with the DOM put script here 
}) 
//Script placed here would execute before the page is finished loading. 
</script>
jQuery Basics 
<div id=“myID” attribute=“myAttribute” class=“myClass” ><b>Hello World</b></div>
jQuery Basics 
<div id=“myID” attribute=“myAttribute” class=“myClass” ><b>Hello World</b></div> 
//Retrieve the element by ID: 
$(“#myID”);
jQuery Basics 
<div id=“myID” attribute=“myAttribute” class=“myClass” ><b>Hello World</b></div> 
//Retrieve the element by attribute: 
$(“div[attribute=‘myAttribute’]”);
jQuery Basics 
<div id=“myID” attribute=“myAttribute” class=“myClass” ><b>Hello World</b></div> 
//Retrieve every div on the page 
$(“div”).each(function() { 
//”this” is the current element in each loop 
$(this).method(); 
}); 
//Hide all divs on the page 
$(“div”).hide();
jQuery Basics 
<div id=“myID” attribute=“myAttribute” class=“myClass” ><b>Hello World</b></div> 
//Retrieve every div of a specific class 
$(“div.myClass”).each(function() { 
//”this” is the current element in each loop 
$(this).method(); 
}); 
//Hide all divs of a specific class on the page 
$(“div.myClass”).hide(); 
//Hide all elements of a specific class on the page 
$(“.myClass”).hide();
jQuery Basics 
<div id=“myID” attribute=“myAttribute” class=“myClass” ><b>Hello World</b></div> 
//Retrieve the div that contains content “World” 
$(“div:contains(‘World’)”).each(function() { 
//”this” is the current element in each loop 
$(this).method(); 
});
jQuery Basics 
<div id=“myID” attribute=“myAttribute” class=“myClass” ><b>Hello World</b></div> 
//Retrieve the formatted HTML for an element 
$(“#myID”).html(); //returns <b>Hello World</b> 
//Set the formatted HTML for an element 
$(“#myID”).html(“<b>Hello Nurse</b>”); 
//Retrieve the text with HTML formatting stripped out 
$(“#myID”).text(); //returns Hello World 
//Set the unformatted text of an element 
$(“#myID”).text(“Hello Nurse”);
MORE Jquery basics 
//get input / select values 
$(“#id”).val(); 
//set input / select values 
$(“#id”).val(“value”); 
//uncheck a check box 
$(“#id").removeAttr('checked'); 
//check a check box 
$(“#id").attr('checked','checked'); 
//is a check box checked? 
if ($(“#id”).is(':checked'))
MORE Jquery basics 
<tr id=‘myRow’><td><div id=‘myElement’></div><div id=‘myOtherElement’></div></td></tr>
MORE Jquery basics 
<tr id=‘myRow’><td><div id=‘myElement’></div><div id=‘myOtherElement’></div></td></tr> 
//get the row that contains the div “myElement” 
$(“#myElement”).closest(“tr”); 
//get the cell that contains the div “myElement” 
$(“#myElement”).closest(“td”); 
Or 
$(“#myElement”).parent();
MORE Jquery basics 
<tr id=‘myRow’><td><div id=‘myElement’></div><div id=‘myOtherElement’></div></td></tr> 
//get the div AFTER myElement 
$(“#myElement”).next(“div”); 
Or 
$(“#myElement”).next(); 
//get the div BEFORE myOtherelement 
$(“#myOtherElement”).prev(“div”); 
Or 
$(“#myOtherElement”).prev();
Chaining 
//find the input element that has the “title” attribute equal to “Name” 
//then find it’s parent cell’s previous cell. Then find the “h3” element and replace the HTML 
$("input[title='Name']").closest("td").prev("td").find("h3").html("File Name <font 
color='red'>*</font>"); 
//In English: Find the label for the field “Name” and change it to “File Name” and add a red 
astrisk 
//find the input element that has the “title” attribute equal to “City” 
//then hide the entire row that contains the input 
$(“input[title=‘City’]”).closest(“tr”).hide(); 
//In English: Hide the SharePoint Form Field and label for the field with the Display 
//name “City”
How About Some Best Practices? 
• Use the Element’s ID when possible 
• Reduce DOM searches 
• Re-use code / Good coding practices 
• Minimize files 
• Use animations to hide slow performance 
• Delay loading of Selects until you need the 
data
Using Third Party Libraries 
Tips for selection and integration 
• Look for supported / documented libraries 
• Test in target browsers before implementing 
• Duplicate file structure 
• Test “vanilla” in SharePoint first
Using Third Party Libraries 
Some of my favorites 
• Content Slider - http://unslider.com 
• Formatted Tables - http://www.datatables.net/ 
• Modal Window - http://www.ericmmartin.com/projects/simplemodal/ 
• SPServices - http://spservices.codeplex.com/ 
• Calendar - http://arshaw.com/fullcalendar/ 
• Forms 7 – http://forms7.codeplex.com
Interacting with SharePoint Forms 
<input 
name="ctl00$m$g_a12c0b73_06fa_4552_a5af_b5d5fce55384$ctl00$ctl05$ctl03$ctl00$ctl00$ctl04$ctl00$ctl00$Tex 
tField" type="text" maxlength="255" 
id="ctl00_m_g_a12c0b73_a12c0b73_06fa_06fa_4552_4552_a5af_a5af_b5d5fce55384_b5d5fce55384_ctl00_ctl00_ctl05_ctl05_ctl03_ctl03_ctl00_ctl00_ctl00_ctl00_ctl04_ctl04_ctl00_ctl00_ctl00_ctl00_TextFie 
TextFi 
ld" title="E-mail Address" class=“ms-long ms-spellcheck-true" /> 
<input 
name="ctl00$m$g_a12c0b73_06fa_4552_a5af_b5d5fce55384$ctl00$ctl05$ctl03$ctl00$ctl00$ctl04$ctl00$ctl00$Tex 
tField" type="text" maxlength="255" 
id="ctl00_m_g_a12c0b73_06fa_4552_a5af_b5d5fce55384_ctl00_ctl05_ctl03_ctl00_ctl00_ctl04_ctl00_ctl00_TextFie 
ld" title="E-mail Address" class=“ms-long ms-spellcheck-true" /> 
eld" title="E-mail Address" class=“ms-long ms-spellcheck-true" />` 
<input 
name="ctl00$m$g_a12c0b73_06fa_4552_a5af_b5d5fce55384$ctl00$ctl05$ctl03$ctl00$ctl00$ctl04$ctl00$ctl00$Tex 
tField" type="text" maxlength="255" 
id="ctl00_m_g_a12c0b73_06fa_4552_a5af_b5d5fce55384_ctl00_ctl05_ctl03_ctl00_ctl00_ctl04_ctl00_ctl00_TextFie 
ld" title="E-mail Address Required Field" class=“ms-long ms-spellcheck-true" /> 
$(“input[title=‘E-mail Address’]”); //returns element 
$(“input[title=‘E-mail Address Required Field’]”); //returns element
September, Twenty Fourteen

More Related Content

What's hot (20)

PPTX
SPTechCon - Share point and jquery essentials
Mark Rackley
 
PPTX
Introduction to Client Side Dev in SharePoint Workshop
Mark Rackley
 
PPTX
SPSDenver - SharePoint & jQuery - What I wish I would have known
Mark Rackley
 
PPTX
SharePoint & jQuery Guide - SPSTC 5/18/2013
Mark Rackley
 
PPTX
2/15/2012 - Wrapping Your Head Around the SharePoint Beast
Mark Rackley
 
PPTX
SharePoint Saturday St. Louis - SharePoint & jQuery
Mark Rackley
 
PPTX
Intro to SharePoint Web Services
Mark Rackley
 
PPTX
Introduction to using jQuery with SharePoint
Rene Modery
 
PPTX
SPTechCon Boston 2015 - Overcoming SharePoint Limitations
Mark Rackley
 
PPTX
A Power User's Intro to jQuery Awesomeness in SharePoint
Mark Rackley
 
PPTX
SharePoint REST vs CSOM
Mark Rackley
 
PPTX
Introduction to StratusForms #SayNoToInfoPath
Mark Rackley
 
PPTX
#SPSTC Maximizing the SharePoint User Experience with Free 3rd Party jQuery L...
Mark Rackley
 
PPTX
Using jQuery to Maximize Form Usability
Mark Rackley
 
PPTX
SEF2013 - A jQuery Primer for SharePoint
Marc D Anderson
 
PPTX
The SharePoint & jQuery Guide
Mark Rackley
 
PPTX
Bringing HTML5 alive in SharePoint
Chad Schroeder
 
PPTX
Oracle Application Express & jQuery Mobile - OGh Apex Dag 2012
crokitta
 
PPTX
Transform SharePoint default list forms with HTML, CSS and JavaScript
John Calvert
 
PDF
HTML5 and CSS3 refresher
Ivano Malavolta
 
SPTechCon - Share point and jquery essentials
Mark Rackley
 
Introduction to Client Side Dev in SharePoint Workshop
Mark Rackley
 
SPSDenver - SharePoint & jQuery - What I wish I would have known
Mark Rackley
 
SharePoint & jQuery Guide - SPSTC 5/18/2013
Mark Rackley
 
2/15/2012 - Wrapping Your Head Around the SharePoint Beast
Mark Rackley
 
SharePoint Saturday St. Louis - SharePoint & jQuery
Mark Rackley
 
Intro to SharePoint Web Services
Mark Rackley
 
Introduction to using jQuery with SharePoint
Rene Modery
 
SPTechCon Boston 2015 - Overcoming SharePoint Limitations
Mark Rackley
 
A Power User's Intro to jQuery Awesomeness in SharePoint
Mark Rackley
 
SharePoint REST vs CSOM
Mark Rackley
 
Introduction to StratusForms #SayNoToInfoPath
Mark Rackley
 
#SPSTC Maximizing the SharePoint User Experience with Free 3rd Party jQuery L...
Mark Rackley
 
Using jQuery to Maximize Form Usability
Mark Rackley
 
SEF2013 - A jQuery Primer for SharePoint
Marc D Anderson
 
The SharePoint & jQuery Guide
Mark Rackley
 
Bringing HTML5 alive in SharePoint
Chad Schroeder
 
Oracle Application Express & jQuery Mobile - OGh Apex Dag 2012
crokitta
 
Transform SharePoint default list forms with HTML, CSS and JavaScript
John Calvert
 
HTML5 and CSS3 refresher
Ivano Malavolta
 

Similar to SPSNH 2014 - The SharePoint & jQueryGuide (20)

PPTX
SharePoint and jQuery Essentials
Mark Rackley
 
PPTX
The SharePoint and jQuery Guide by Mark Rackley - SPTechCon
SPTechCon
 
PPTX
SharePoint Cincy 2012 - jQuery essentials
Mark Rackley
 
PPTX
SPSTC - SharePoint & jQuery Essentials
Mark Rackley
 
PDF
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
Doris Chen
 
PPTX
Utilizing jQuery in SharePoint: Get More Done Faster
Mark Rackley
 
PPTX
Jquery fundamentals
Salvatore Fazio
 
PPTX
Popping the Hood: How to Create Custom SharePoint Branding by Randy Drisgill ...
SPTechCon
 
PDF
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Lucidworks
 
PDF
HTML5: Introduction
Guillermo Paz
 
PPT
Ajax workshop
WBUTTUTORIALS
 
PDF
Stencil the time for vanilla web components has arrived
Gil Fink
 
PPTX
Apex & jQuery Mobile
Christian Rokitta
 
PDF
An Introduction to Tornado
Gavin Roy
 
PDF
Web Components v1
Mike Wilcox
 
PDF
Does my DIV look big in this?
glen_a_smith
 
PPTX
JS Essence
Uladzimir Piatryka
 
PPTX
Hdv309 - Real World Sandboxed Solutions
woutervugt
 
PPTX
JavaScript front end performance optimizations
Chris Love
 
PPTX
web development
RamanDeep876641
 
SharePoint and jQuery Essentials
Mark Rackley
 
The SharePoint and jQuery Guide by Mark Rackley - SPTechCon
SPTechCon
 
SharePoint Cincy 2012 - jQuery essentials
Mark Rackley
 
SPSTC - SharePoint & jQuery Essentials
Mark Rackley
 
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
Doris Chen
 
Utilizing jQuery in SharePoint: Get More Done Faster
Mark Rackley
 
Jquery fundamentals
Salvatore Fazio
 
Popping the Hood: How to Create Custom SharePoint Branding by Randy Drisgill ...
SPTechCon
 
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Lucidworks
 
HTML5: Introduction
Guillermo Paz
 
Ajax workshop
WBUTTUTORIALS
 
Stencil the time for vanilla web components has arrived
Gil Fink
 
Apex & jQuery Mobile
Christian Rokitta
 
An Introduction to Tornado
Gavin Roy
 
Web Components v1
Mike Wilcox
 
Does my DIV look big in this?
glen_a_smith
 
JS Essence
Uladzimir Piatryka
 
Hdv309 - Real World Sandboxed Solutions
woutervugt
 
JavaScript front end performance optimizations
Chris Love
 
web development
RamanDeep876641
 
Ad

More from Mark Rackley (9)

PPTX
Column Formatter in SharePoint Online
Mark Rackley
 
PPTX
SharePoint Conference North America - Converting your JavaScript to SPFX
Mark Rackley
 
PPTX
A Power User's Introduction to jQuery Awesomeness in SharePoint
Mark Rackley
 
PPTX
Citizen Developers Intro to jQuery Customizations in SharePoint
Mark Rackley
 
PPTX
A Power User's intro to jQuery awesomeness in SharePoint
Mark Rackley
 
PDF
NOW I Get it!! What SharePoint IS and why I need it
Mark Rackley
 
PPTX
What is SharePoint Development??
Mark Rackley
 
PPTX
Wrapping your head around the SharePoint Beast (For the rest of us)
Mark Rackley
 
PPTX
What IS SharePoint Development?
Mark Rackley
 
Column Formatter in SharePoint Online
Mark Rackley
 
SharePoint Conference North America - Converting your JavaScript to SPFX
Mark Rackley
 
A Power User's Introduction to jQuery Awesomeness in SharePoint
Mark Rackley
 
Citizen Developers Intro to jQuery Customizations in SharePoint
Mark Rackley
 
A Power User's intro to jQuery awesomeness in SharePoint
Mark Rackley
 
NOW I Get it!! What SharePoint IS and why I need it
Mark Rackley
 
What is SharePoint Development??
Mark Rackley
 
Wrapping your head around the SharePoint Beast (For the rest of us)
Mark Rackley
 
What IS SharePoint Development?
Mark Rackley
 
Ad

Recently uploaded (20)

PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
July Patch Tuesday
Ivanti
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
Biography of Daniel Podor.pdf
Daniel Podor
 
PDF
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
PDF
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
PDF
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PDF
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
July Patch Tuesday
Ivanti
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
Biography of Daniel Podor.pdf
Daniel Podor
 
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 

SPSNH 2014 - The SharePoint & jQueryGuide

  • 1. SharePoint Saturday New Hampshire The SharePoint & jQuery Guide [email protected] October, Twenty Fourteen
  • 2. Was made possible by the generous support of the following sponsors… And by your participation… Thank you!
  • 3. Join us for the raffle & SharePint following the last session Be sure to fill out your eval form & turn in at the end of the day for a ticket to the BIG raffle!
  • 4. Mark Rackley / Principal Consultant • 20 years software architecture and development experience • SharePoint Junkie since 2007 • Event Organizer (SharePointalooza.org) • Blogger, Writer, Speaker • Bacon aficionado @mrackley www.SharePointHillbilly.com www.MarkRackley.net www.SharePointaLooza.org
  • 5. Agenda • What is jQuery? Why SharePoint & jQuery? • SharePoint and jQuery Basics • Deploying / Maintaining • Development Basics • Third Party Libraries • Examples & Demos The SharePoint & jQuery Guide http://bit.ly/jQueryAndSP
  • 6. What is jQuery? • JavaScript Utility Library • jQuery() or $() • Allows interaction and manipulation of the DOM after page is rendered • Can interact with other systems using Web Services • Supported by Microsoft • Part of “Client Side” Development
  • 7. Why SharePoint & jQuery? • Fewer upgrade/deployment issues • Rapid deployment and modifications • Less “customization” • Improved visuals • Improved usability
  • 8. Why SharePoint & jQuery? • Can replace the need for Visual Studio • Can replace the need for basic workflows • No points (shhhh… don’t tell the admins) • You can get around the ListView Threshold (but should you??)
  • 9. jQuery & SharePoint Basics • Scripts execute with same privileges as current user • Permissions cannot be elevated • Interact with SharePoint List data using Client Side Object Model (CSOM), REST, or SPServices
  • 10. Why I Hate JavaScript & jQuery (some days) • Too many options var car = { color: “red”, make: “Jeep”, model: “wrangler” } var car = {}; car.color = “red”; car.make = “Jeep”; car.model=“wranger”; var car = {}; car[“color”] = “red”; car[“make”] = “Jeep”; car[“model”] =“wranger”;
  • 11. Why I Hate JavaScript & jQuery (some days) • Too many options • Debugging is painful • Performance can suffer • Inconsistent results on different browsers • Constant changes in the jQuery library • It CAN harm your farm!
  • 12. When Should You Use jQuery? • Tightly controlled environments • Visuals or Usability are high priorities • Tight timeframes • Simple page and form modifications  Dynamic drop downs  Hiding page elements  Reading / populating fields • Why would you NOT use jQuery?
  • 13. When Should You Question the Use of jQuery? • Need pull a lot of data over the wire to work with • Iterating over many rows of list data • Extended business logic or proprietary business logic • Privileges need to be elevated • Need to support many different browsers
  • 14. Deployment Options • Document Library <script type="text/javascript" src="/SiteAssets/jquery.min.js"></script> • File System <script type="text/javascript" src="/_layouts/scripts/jquery.min.js"></script> • Content Delivery Network (CDN) <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
  • 16. Reference Options • ScriptLink <SharePoint:ScriptLink runat="server" Name="/SiteAssets/jquery.min.js" Localizable="false"></SharePoint:ScriptLink> • Content Editor Web Part • Use the Content Link • Custom Action • Feature, Deploys to Site Collection
  • 17. Custom Action <?xml version="1.0" encoding="utf-8"?> <Elements xmlns="http://schemas.microsoft.com/sharepoint/"> <CustomAction ScriptSrc="~sitecollection/SiteAssets/jquery.min.js" Location="ScriptLink" Sequence="100" > </CustomAction> </Elements>
  • 18. A Word (or two) About MDS Minimal Download Strategy (MDS) • New in SharePoint 2013 / enabled by default • Reduces page load time by sending only the differences when users navigate to a new page. • https://sp_site/_layouts/15/start.aspx#/SitePages/newpage.aspx • Can cause scripts referenced in Custom Actions and CEWPs to not be loaded • Disable feature at site level if MDS is causing issues. Rework scripts based on recommendations in order to use MDS.
  • 19. Development & Debugging • Development • Visual Studio  Web Essentials • SharePoint Designer • Notepad++ • Debugging • IE Developer Tools / Firebug • Fiddler • Alerts… alerts… alerts… • Avoid Console.log • Write scripts in small manageable chunks
  • 20. jQuery Methods Commonly Used in SharePoint
  • 21. jQuery Basics <script type="text/javascript"> $(document).ready(function($){ //this script executes after the page is loaded //if you need to interact with the DOM put script here }) //Script placed here would execute before the page is finished loading. </script>
  • 22. jQuery Basics <div id=“myID” attribute=“myAttribute” class=“myClass” ><b>Hello World</b></div>
  • 23. jQuery Basics <div id=“myID” attribute=“myAttribute” class=“myClass” ><b>Hello World</b></div> //Retrieve the element by ID: $(“#myID”);
  • 24. jQuery Basics <div id=“myID” attribute=“myAttribute” class=“myClass” ><b>Hello World</b></div> //Retrieve the element by attribute: $(“div[attribute=‘myAttribute’]”);
  • 25. jQuery Basics <div id=“myID” attribute=“myAttribute” class=“myClass” ><b>Hello World</b></div> //Retrieve every div on the page $(“div”).each(function() { //”this” is the current element in each loop $(this).method(); }); //Hide all divs on the page $(“div”).hide();
  • 26. jQuery Basics <div id=“myID” attribute=“myAttribute” class=“myClass” ><b>Hello World</b></div> //Retrieve every div of a specific class $(“div.myClass”).each(function() { //”this” is the current element in each loop $(this).method(); }); //Hide all divs of a specific class on the page $(“div.myClass”).hide(); //Hide all elements of a specific class on the page $(“.myClass”).hide();
  • 27. jQuery Basics <div id=“myID” attribute=“myAttribute” class=“myClass” ><b>Hello World</b></div> //Retrieve the div that contains content “World” $(“div:contains(‘World’)”).each(function() { //”this” is the current element in each loop $(this).method(); });
  • 28. jQuery Basics <div id=“myID” attribute=“myAttribute” class=“myClass” ><b>Hello World</b></div> //Retrieve the formatted HTML for an element $(“#myID”).html(); //returns <b>Hello World</b> //Set the formatted HTML for an element $(“#myID”).html(“<b>Hello Nurse</b>”); //Retrieve the text with HTML formatting stripped out $(“#myID”).text(); //returns Hello World //Set the unformatted text of an element $(“#myID”).text(“Hello Nurse”);
  • 29. MORE Jquery basics //get input / select values $(“#id”).val(); //set input / select values $(“#id”).val(“value”); //uncheck a check box $(“#id").removeAttr('checked'); //check a check box $(“#id").attr('checked','checked'); //is a check box checked? if ($(“#id”).is(':checked'))
  • 30. MORE Jquery basics <tr id=‘myRow’><td><div id=‘myElement’></div><div id=‘myOtherElement’></div></td></tr>
  • 31. MORE Jquery basics <tr id=‘myRow’><td><div id=‘myElement’></div><div id=‘myOtherElement’></div></td></tr> //get the row that contains the div “myElement” $(“#myElement”).closest(“tr”); //get the cell that contains the div “myElement” $(“#myElement”).closest(“td”); Or $(“#myElement”).parent();
  • 32. MORE Jquery basics <tr id=‘myRow’><td><div id=‘myElement’></div><div id=‘myOtherElement’></div></td></tr> //get the div AFTER myElement $(“#myElement”).next(“div”); Or $(“#myElement”).next(); //get the div BEFORE myOtherelement $(“#myOtherElement”).prev(“div”); Or $(“#myOtherElement”).prev();
  • 33. Chaining //find the input element that has the “title” attribute equal to “Name” //then find it’s parent cell’s previous cell. Then find the “h3” element and replace the HTML $("input[title='Name']").closest("td").prev("td").find("h3").html("File Name <font color='red'>*</font>"); //In English: Find the label for the field “Name” and change it to “File Name” and add a red astrisk //find the input element that has the “title” attribute equal to “City” //then hide the entire row that contains the input $(“input[title=‘City’]”).closest(“tr”).hide(); //In English: Hide the SharePoint Form Field and label for the field with the Display //name “City”
  • 34. How About Some Best Practices? • Use the Element’s ID when possible • Reduce DOM searches • Re-use code / Good coding practices • Minimize files • Use animations to hide slow performance • Delay loading of Selects until you need the data
  • 35. Using Third Party Libraries Tips for selection and integration • Look for supported / documented libraries • Test in target browsers before implementing • Duplicate file structure • Test “vanilla” in SharePoint first
  • 36. Using Third Party Libraries Some of my favorites • Content Slider - http://unslider.com • Formatted Tables - http://www.datatables.net/ • Modal Window - http://www.ericmmartin.com/projects/simplemodal/ • SPServices - http://spservices.codeplex.com/ • Calendar - http://arshaw.com/fullcalendar/ • Forms 7 – http://forms7.codeplex.com
  • 37. Interacting with SharePoint Forms <input name="ctl00$m$g_a12c0b73_06fa_4552_a5af_b5d5fce55384$ctl00$ctl05$ctl03$ctl00$ctl00$ctl04$ctl00$ctl00$Tex tField" type="text" maxlength="255" id="ctl00_m_g_a12c0b73_a12c0b73_06fa_06fa_4552_4552_a5af_a5af_b5d5fce55384_b5d5fce55384_ctl00_ctl00_ctl05_ctl05_ctl03_ctl03_ctl00_ctl00_ctl00_ctl00_ctl04_ctl04_ctl00_ctl00_ctl00_ctl00_TextFie TextFi ld" title="E-mail Address" class=“ms-long ms-spellcheck-true" /> <input name="ctl00$m$g_a12c0b73_06fa_4552_a5af_b5d5fce55384$ctl00$ctl05$ctl03$ctl00$ctl00$ctl04$ctl00$ctl00$Tex tField" type="text" maxlength="255" id="ctl00_m_g_a12c0b73_06fa_4552_a5af_b5d5fce55384_ctl00_ctl05_ctl03_ctl00_ctl00_ctl04_ctl00_ctl00_TextFie ld" title="E-mail Address" class=“ms-long ms-spellcheck-true" /> eld" title="E-mail Address" class=“ms-long ms-spellcheck-true" />` <input name="ctl00$m$g_a12c0b73_06fa_4552_a5af_b5d5fce55384$ctl00$ctl05$ctl03$ctl00$ctl00$ctl04$ctl00$ctl00$Tex tField" type="text" maxlength="255" id="ctl00_m_g_a12c0b73_06fa_4552_a5af_b5d5fce55384_ctl00_ctl05_ctl03_ctl00_ctl00_ctl04_ctl00_ctl00_TextFie ld" title="E-mail Address Required Field" class=“ms-long ms-spellcheck-true" /> $(“input[title=‘E-mail Address’]”); //returns element $(“input[title=‘E-mail Address Required Field’]”); //returns element