SlideShare a Scribd company logo
A jQuery Primer for SharePoint
What is jQuery?




      is
GETTING STARTED
Getting Started

• Add references to the jQuery library
  – Master page
  – Page layout
  – Individual aspx pages
Referencing Script Libraries from CDNs
<!-- Reference the jQueryUI theme's stylesheet on the Google
CDN. Here we're using the "start" theme -->
<link type="text/css" rel="stylesheet"
href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/theme
s/start/jquery-ui.css" />
<!-- Reference jQuery on the Google CDN -->
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.mi
n.js"></script>
<!-- Reference jQueryUI on the Google CDN -->
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery
-ui.min.js"></script>
<!-- Reference SPServices on cdnjs (Cloudflare) -->
<script type="text/javascript"
src="http://cdnjs.cloudflare.com/ajax/libs/jquery.SPServices/0.7
.1a/jquery.SPServices-0.7.1a.min.js"></script>

More: http://sympmarc.com/2012/04/20/referencing-jquery-jqueryui-and-spservices-from-cdns/
SharePoint Web Technology

• HTML
  – Hypertext Markup Language
  – Content and structure

• CSS
  – Cascading Style Sheets
  – Presentation and style

• JavaScript and jQuery
  – Interactive behavior
HTML Elements

           Opening tag                          Closing tag



Powered by <a href="http://office365.com">Office365</a>.


            Attribute       Value
INTRO TO CSS
Intro to CSS:
          Why does CSS matter?
• CSS = Cascading Style Sheets
• jQuery uses selectors that are very similar
  to CSS selectors
• CSS is the fundamental styling
  mechanism for the Web
• HTML + CSS + jQuery = AWESOME
CSS Styles


Select HTML element(s)       .article {
         Modify them!           color: red;
                             }
CSS Element Selectors

p {                  <p>
    color: red;         Paragraph of text.
}                    </p>




           Paragraph of text.
CSS Class Selectors

.article {             <div class="article">
    color: red;           This is an article.
}                      </div>




             This is an article.
CSS ID Selectors

#header {             <div id="header">
    color: red;          This is a header.
}                     </div>




            This is a header.
CSS Descendant Selectors

#header h1 {        <div id="header">
                       <h1>
    color: red;
                         This is a header.
}                      </h1>
                    </div>




           This is a header.
CSS Composite Selectors
#header ul.top-nav li {        <div id="header">
    color: red;                  <ul class="top-nav">
}                                   <li>Item 1</li>
                                    <li>Item 2</li>
                                    <li>Item 3</li>
                                 </ul>
                               </div>

                    • Item 1
                    • Item 2
                    • Item 3
CSS Complex Selectors
ul.top-nav > li {              <ul class="top-nav">
                                  <li>Item 1</li>
    color: red;                   <li>
}                                    Item 2
                                     <ul class="menu">
                                        <li>Menu 1</li>
                                     </ul>
                                  </li>
                               </ul>



                    • Item 1
                    • Item 2
                      • Menu 1
My CSS "Best" Practices

• Use truly unique class and id names
• Choose a prefix for your project, e.g. „xyz-‟
  or „x51-‟
• All of your classes and ids will be easy to
  select:
     xyz-home-page-article
     x51-top-section
• Don‟t be afraid of verbose class and ID
  names!
DOCUMENT OBJECT MODEL
(DOM)
What is the Document Object Model
                 (DOM)?
• The DOM starts as the page‟s markup
  (HTML) as delivered to the browser by the
  server: View Source
• Styled by the CSS which gives the page
  its the look and feel
• The DOM is acted upon by any script in
  the page
What Can We Do With the DOM?

•   Add or remove CSS classes
•   Create new HTML elements
•   Remove HTML elements
•   Change HTML element attributes
•   And so much more

       The DOM is HTML, which is
          XML, which is data!
IMPORTANT TOOLS
Internet Explorer Developer Tools (F12)

• Shows the Internet Explorer view of
  SharePoint‟s pages – some pages are
  rendered differently in other browsers
The Firebug Add-On for Firefox

• Better for debugging and looking at Net
  traffic
JQUERY BASICS
The Basic Idea of jQuery

     Select something




$('.article').hide();
                        Do something!
jQuery’s Document Ready

$(document).ready(function({
  // do something
});

• Processing is suspended until the page‟s
  DOM is fully loaded
• Ensures that all of the elements you need
  are available
jQuery Documentation: Your Friend


• The jQuery documentation is
  arranged to help you
• What you need to know is
  arranged sequentially from
  top to bottom
SELECTORS
jQuery Selectors

• Selectors are the most important jQuery
  concept
• Selecting the right DOM object(s) is half
  the battle
• Selectors return a collection of DOM
  objects – 1 to n matching elements
jQuery Element Selectors

   <p>
      Paragraph of text.
   </p>



          $("p")
jQuery Element Selectors
          <p>Paragraph 1 of text.</p>
          <p>Paragraph 2 of text.</p>




        var allParagraphs = $("p");

allParagraphs is now defined as a jQuery object
which contains pointers to all paragraphs in the page
jQuery Class Selectors
<div class="article">
   This is an article.
</div>




      $(".article")
jQuery ID Selectors
<div id="header">
   This is a header.
</div>




       $("#header")
jQuery Descendant Selectors
  <div id="header">
     <h1>
       This is a header.
     </h1>
  </div>




        $("#header h1")
jQuery Composite Selectors
 <div id="header">
    <ul class="top-nav">
       <li>Item 1</li>
       <li>Item 2</li>
       <li>Item 3</li>
    </ul>
 </div>



  $("#header ul.top-nav li")
jQuery Complex Selectors
<ul class="top-nav">
   <li>Item 1</li>
   <li>
      Item 2
      <ul class="menu">
         <li>Menu 1</li>
      </ul>
   </li>
</ul>


 $("#header ul.top-nav li")
Selectors for SharePoint

<DIV class=ms-quicklaunchheader>
  <A accessKey=3
id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll
href="/Intranet/JQueryLib/_layouts/viewlsts.aspx">
    View All Site Content
  </A>
</DIV>



     $("div.ms-quicklaunchheader")
Selectors for SharePoint

<DIV class=ms-quicklaunchheader>
  <A accessKey=3
id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll
href="/Intranet/JQueryLib/_layouts/viewlsts.aspx">
    View All Site Content
  </A>
</DIV>



$("#ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll")
Selectors for SharePoint

<DIV class=ms-quicklaunchheader>
  <A accessKey=3
id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll
href="/Intranet/JQueryLib/_layouts/viewlsts.aspx">
    View All Site Content
  </A>
</DIV>



           $("a[id$='NavLinkViewAll']")
Useful jQuery Selector Tricks
• .NET Applications like SharePoint generate some long
  and ugly markup and IDs
• These selector tricks really help
        $("[id='foo']");    //   Equal to
        $("[id!='foo']");   //   Not equal to
        $("[id^='foo']");   //   Starts with
        $("[id$='foo']");   //   Ends with
        $("[id*='foo']");   //   Contains
        $("[id~='foo']");   //   Contains word
        $("[id|='foo']");   //   Contains prefix

        $("[id]"); // Has
        $("[id][class][style]"); // Has all
ATTRIBUTES
jQuery Attributes

• Once you‟ve selected the right DOM
  element, you can use jQuery to get or set
  its attributes
• As of jQuery 1.6, the .prop() method
  provides a way to explicitly retrieve
  property values, while .attr() retrieves
  attributes
jQuery Attributes: Get and Set
 <div id="helloDiv" class="ms-bold">
     Hello, world!
 </div>




GET: var thisClass = $("#helloDiv").attr("class");
SET: $("#helloDiv").attr("class", "ms-hidden");
Example with SharePoint Attributes: Get

 <DIV class=ms-quicklaunchheader>
   <A accessKey=3
 id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll
 href="/Intranet/JQueryLib/_layouts/viewlsts.aspx">
     View All Site Content
   </A>
 </DIV>


var thisKey = $("a[id$='NavLinkViewAll']").attr("accessKey");
Example with SharePoint Attributes: Set

 <DIV class=ms-quicklaunchheader>
   <A accessKey=99
 id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll
 href="/Intranet/JQueryLib/_layouts/viewlsts.aspx">
     View All Site Content
   </A>
 </DIV>



$("a[id$='NavLinkViewAll']").attr("accessKey", 99);
TRAVERSING
Traversing

• Traversing lets you move around the DOM
  based on your initial selection
• This is how you get at elements which are
  difficult to select directly
• Ancestry matters in XML / HTML
Find an Element’s Ancestors
<div id="helloDiv" class="ms-bold">
  <ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
  </ul>
</div>



$("ul").parent();
$("ul").closest("div");
Traversing Down:
   Find an Element’s Specific Children
<DIV class=ms-quicklaunchheader>
  <A accessKey=3
id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll
href="/Intranet/JQueryLib/_layouts/viewlsts.aspx">
    View All Site Content
  </A>
</DIV>



 $("div.ms-quicklaunchheader").find("a");
Traversing Down:
   Find an Element’s Specific Children
<DIV class=ms-quicklaunchheader>
  <A accessKey=3
id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll
href="/Intranet/JQueryLib/_layouts/viewlsts.aspx">
    View All Site Content
  </A>
</DIV>



 $("div.ms-quicklaunchheader").find("a");
SharePoint Example of Traversing:
             Initial Selector
<DIV class=ms-quicklaunchheader>
  <A accessKey=3
id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll
href="/Intranet/JQueryLib/_layouts/viewlsts.aspx">
    View All Site Content
  </A>
</DIV>



 $("a[id$='NavLinkViewAll']").parent();
SharePoint Example of Traversing:
             Finding Parent
<DIV class=ms-quicklaunchheader>
  <A accessKey=3
id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll
href="/Intranet/JQueryLib/_layouts/viewlsts.aspx">
    View All Site Content
  </A>
</DIV>



 $("a[id$='NavLinkViewAll']").parent();
Traversal Example from SPServices
                      SelectCandidate                  SelectResult




<select                                         <select
name="ctl00$m$g_e845e690_00da_428f_afbd_fbe80   name="ctl00$m$g_e845e690_00da_428f_afbd_fbe8047
4787763$ctl00$ctl04$ctl07$ctl00$ctl00$ctl04$c   87763$ctl00$ctl04$ctl07$ctl00$ctl00$ctl04$ctl00
var possibleValues =
tl00$ctl00$SelectCandidate" title="City         $ctl00$SelectResult" title="City selected
                                                values"
possible values"
$("select[ID$='SelectCandidate'][Title^='" +
id="ctl00_m_g_e845e690_00da_428f_afbd_fbe8047   id="ctl00_m_g_e845e690_00da_428f_afbd_fbe804787
87763_ctl00_ctl04_ctl07_ctl00_ctl00_ctl04_ctl   763_ctl00_ctl04_ctl07_ctl00_ctl00_ctl04_ctl00_c
opt.multiSelectColumn + " ']");
00_ctl00_SelectCandidate" style="width:         tl00_SelectResult" style="width: 162px;"
var selectedValues =
162px;" onkeydown="GipHandleHScroll(event)"     onkeydown="GipHandleHScroll(event)"
                                                ondblclick="GipRemoveSelectedItems(ctl00_m_g_e8
ondblclick="GipAddSelectedItems(ctl00_m_g_e84
possibleValues.closest("span").find("select[ID$='SelectResult
5e690_00da_428f_afbd_fbe804787763_ctl00_ctl04   45e690_00da_428f_afbd_fbe804787763_ctl00_ctl04_
_ctl07_ctl00_ctl00_ctl04_ctl00_ctl00_MultiLoo   ctl07_ctl00_ctl00_ctl04_ctl00_ctl00_MultiLookup
'][Title^='" + opt.multiSelectColumn + " ']");
kupPicker_m); return false"                     Picker_m); return false"
onchange="GipSelectCandidateItems(ctl00_m_g_e   onchange="GipSelectResultItems(ctl00_m_g_e845e6
845e690_00da_428f_afbd_fbe804787763_ctl00_ctl   90_00da_428f_afbd_fbe804787763_ctl00_ctl04_ctl0
04_ctl07_ctl00_ctl00_ctl04_ctl00_ctl00_MultiL   7_ctl00_ctl00_ctl04_ctl00_ctl00_MultiLookupPick
ookupPicker_m);" size="350" multiple="">        er_m);" size="20" multiple="">
MANIPULATION
Manipulation

• Once you‟ve gotten the right element(s),
  you can manipulate their attributes or
  properties
• You can also change their contents
Manipulation:
                Adding Text
<div id="helloDiv" class="ms-bold">
  Hello, world!
</div>


$("#helloDiv").append("And you're welcome to it!");



<div id="helloDiv" class="ms-bold">
  Hello, world! And you're welcome to it!
</div>
Manipulation:
            Adding CSS Classes
<div id="helloDiv" class="ms-bold">
  Hello, world!
</div>


$("#helloDiv").addClass("my-class");




<div id="helloDiv" class="ms-bold my-class">
  Hello, world!
</div>
Manipulation:
             Wrapping Elements
<div id="helloDiv" class="ms-bold">
  Hello, world!
</div>

$("#helloDiv")
  .wrap("<a href='http://cnn.com'></a>");



<a href="http://cnn.com">
  <div id="helloDiv" class="ms-bold">
     Hello, world!
  </div>
</a>
Manipulation:
             Inserting Elements
<div id="helloDiv" class="ms-bold">
  Hello, world!
</div>


$("#helloDiv")
  .before("<div>This is a new div.</div>");




<div>This is a new div.</div>
<div id="helloDiv" class="ms-bold">
  Hello, world!
</div>
Manipulation:
                Changing CSS
<div id="helloDiv" class="ms-bold">
  Hello, world!
</div>



$("#helloDiv").css("background-color", "fuchsia");




$("#helloDiv").css({
  border: "1px black solid",
  color: "red"
});
EVENTS
Events

• jQuery‟s events enable you to work with all
  of the standard JavaScript events
• These methods are used to register
  behaviors to take effect when the user
  interacts with the browser, and to further
  manipulate those registered behaviors.
jQuery Events
$('.article').click(function(){
  // do something
});

$('.article').mouseover(function(){
  // do something
});
jQuery Events
$("h3.ms-WPTitle").click(function() {
  alert("You'll now be taken directly to the list.");
});

$("h3.ms-WPTitle").mouseover(function() {
 $("#helloDiv").css("background-color", "fuchsia");
});
EFFECTS
Effects

• jQuery gives you a set of effects you can
  use to change the elements in the page
• Effects can be:
  – Visual: Change how the user sees existing
    elements with animations
  – Manipulative: Change where and how
    elements are shown by moving them around
    in the DOM
jQuery Effects Examples
$('.article').hide();
$('.article').slideUp();
$('.article').after('<em>Hello!</em>');
$('.article').css('color', 'red');
Putting It Together: Example

• This example changes what happens when
  you click on a Web Part Title.
// Remove the links on the Web Part Titles
$("h3.ms-WPTitle").find("nobr").unwrap("<a></a>");

// Add click behavior that toggles the visibility
// of the Web Part
$("h3.ms-WPTitle").click(function() {
  $(this).closest("table").closest("tr").next().toggle();
});
Putting It Together: Example
• This example shows part of SPArrangeChoices from
  SPServices.
// Collect all of the choices
$(thisFormField).find("tr").each(function() {
    columnOptions.push($(this).html());
});
out = "<TR>";

// Add all of the options to the out string
for(i=0; i < columnOptions.length; i++) {
    out += columnOptions[i];
    // If we've already got perRow columnOptions in the row, close off the row
    if((i+1) % opt.perRow === 0) {
           out += "</TR><TR>";
    }
}
out += "</TR>";

// Remove the existing rows...
$(thisFormField).find("tr").remove();
// ...and append the out string
$(thisFormField).find("table").append(out);
jQueryUI Takes Effects Further


$('.article').tabs();
$('input').autocomplete();
$('#infoBox').dialog();

…and many more
jQuery Plugins Abound!

• If you want to do something sophisticated,
  look for an existing plugin
• Do some due diligence – some of the
  plugins aren‟t written very well
• Beware of “plugin sprawl”
More Useful Tools

• JavaScript Compressorator – Minifies
  script files using multiple methods
  http://compressorrater.thruhere.net/
• JSLint – Checks your script against
  accepted standards http://jslint.com/
  “Warning: JSLint will hurt your feelings.”
Contact Information
                     eMail marc.anderson@sympraxisconsulting.com
                      Blog http://sympmarc.com
              SPServices http://spservices.codeplex.com
                  SPXSLT http://spxslt.codeplex.com
         USPJA Academy http://uspja.com
                    eBook http://bit.ly/UnlockingDVWP
The Middle Tier Manifesto http://bit.ly/middletier

More Related Content

PPTX
SharePoint and jQuery Essentials
PPT
J query b_dotnet_ug_meet_12_may_2012
PPT
J query module1
PPTX
jQuery Presentation
PDF
jQuery Loves Developers - Oredev 2009
KEY
User Interface Development with jQuery
KEY
Nothing Hard Baked: Designing the Inclusive Web
PDF
Caffeinated Style Sheets
SharePoint and jQuery Essentials
J query b_dotnet_ug_meet_12_may_2012
J query module1
jQuery Presentation
jQuery Loves Developers - Oredev 2009
User Interface Development with jQuery
Nothing Hard Baked: Designing the Inclusive Web
Caffeinated Style Sheets

What's hot (19)

PPTX
SharePoint Cincy 2012 - jQuery essentials
PDF
PPT
J query presentation
KEY
Templates
PDF
Learn css3
PPTX
PDF
DirectToWeb 2.0
PDF
fuser interface-development-using-jquery
PPTX
Introduction to jQuery
PPTX
JQuery
PDF
Introduction to Web Components
PDF
jQuery: Nuts, Bolts and Bling
PDF
Django workshop : let's make a blog
PPTX
FFW Gabrovo PMG - jQuery
PPTX
Test automation with selenide
PPTX
FFW Gabrovo PMG - JavaScript 1
PDF
WAI-ARIA - an introduction to accessible rich internet applications (1 day wo...
PPTX
Internet and Web Technology (CLASS-10) [Node.js] | NIC/NIELIT Web Technology
PDF
Jquery In Rails
SharePoint Cincy 2012 - jQuery essentials
J query presentation
Templates
Learn css3
DirectToWeb 2.0
fuser interface-development-using-jquery
Introduction to jQuery
JQuery
Introduction to Web Components
jQuery: Nuts, Bolts and Bling
Django workshop : let's make a blog
FFW Gabrovo PMG - jQuery
Test automation with selenide
FFW Gabrovo PMG - JavaScript 1
WAI-ARIA - an introduction to accessible rich internet applications (1 day wo...
Internet and Web Technology (CLASS-10) [Node.js] | NIC/NIELIT Web Technology
Jquery In Rails
Ad

Viewers also liked (7)

PPTX
Getting started with Office 365 APIs
PPTX
SharePoint Add-Ins - the Next Level
PPTX
Developing Apps for SharePoint Store
PPTX
SPTechCon SFO 2014 - Creating a Great User Experience in SharePoint
PPTX
SPTechCon SFO 2014 - Create a Business Solution, Step by Step, with No Manage...
PPTX
Sharepoint 2013-applied architecture from the field v3 (public)
PDF
Building SharePoint 2013 Apps - Architecture, Authentication & Connectivity API
Getting started with Office 365 APIs
SharePoint Add-Ins - the Next Level
Developing Apps for SharePoint Store
SPTechCon SFO 2014 - Creating a Great User Experience in SharePoint
SPTechCon SFO 2014 - Create a Business Solution, Step by Step, with No Manage...
Sharepoint 2013-applied architecture from the field v3 (public)
Building SharePoint 2013 Apps - Architecture, Authentication & Connectivity API
Ad

Similar to SharePointfest Denver - A jQuery Primer for SharePoint (20)

PDF
Basic css-tutorial
PDF
Basic-CSS-tutorial
PDF
Basic-CSS-tutorial
PPTX
Jquery introduction
KEY
Ease into HTML5 and CSS3
PPTX
SEF2013 - A jQuery Primer for SharePoint
PDF
jQuery Rescue Adventure
PPTX
Iniciando com jquery
PDF
Selectors Performance
PDF
jQuery for beginners
PPTX
Working With JQuery Part1
PDF
Prototyping w/HTML5 and CSS3
PDF
Creative Web 02 - HTML & CSS Basics
PPTX
J query1
PDF
Write Less Do More
PPTX
Learn html and css from scratch
PPTX
Hardcore CSS
PDF
JQuery do dia-a-dia Gustavo Dutra
PDF
jQuery - Introdução
Basic css-tutorial
Basic-CSS-tutorial
Basic-CSS-tutorial
Jquery introduction
Ease into HTML5 and CSS3
SEF2013 - A jQuery Primer for SharePoint
jQuery Rescue Adventure
Iniciando com jquery
Selectors Performance
jQuery for beginners
Working With JQuery Part1
Prototyping w/HTML5 and CSS3
Creative Web 02 - HTML & CSS Basics
J query1
Write Less Do More
Learn html and css from scratch
Hardcore CSS
JQuery do dia-a-dia Gustavo Dutra
jQuery - Introdução

More from Marc D Anderson (20)

PPTX
SPC2019 - Managing Content Types in the Modern World
PPTX
ECS2019 - Managing Content Types in the Modern World
PPTX
Rencontre Groupe d'usagers SharePoint Montreal - The Next Great Migration - C...
PPTX
RISPUG - Top Form - Using PowerApps to Replace List Forms
PPTX
SPCNA 2018 - Top Form - Using PowerApps to Replace List Forms
PPTX
SPCNA 2018 - The Next Great Migration - Classic to Modern
PPTX
SPS New York City 2017 - The Lay of the Land of Client-Side Development circa...
PPTX
ECS Zagreb 2017 - Content Types - Love Them or Lose It
PPTX
SPS Monaco 2017 - The Lay of the Land of Client-Side Development circa 2017
PPTX
Lions Tigers Teams - SPTechCon Austin 2017
PPTX
Oslo SP User Group - Content Types - Love Them or Lose It
PPTX
Unity Connect Haarlem 2016 - The Lay of the Land of Client-Side Development c...
PPTX
SPTechCon Boston 2016 - Creating a Great User Experience in SharePoint
PPTX
SPTechCon Boston 2016 - Content Types - Love Them or Lose It
PPTX
SPC Adriatics 2016 - Creating a Great User Experience in SharePoint
PPTX
SPC Adriatics 2016 - Alternative Approaches to Solution Development in Office...
PPTX
SharePointFest Konferenz 2016 - Creating a Great User Experience in SharePoint
PPTX
SharePointFest Konferenz 2016 - Alternative Approaches to Solution Developmen...
PPTX
SPTechCon Austin 2016 - Content Types-Love Them or Lose It
PPTX
SPTechCon Austin 2016 - Creating a Great User Experience in SharePoint
SPC2019 - Managing Content Types in the Modern World
ECS2019 - Managing Content Types in the Modern World
Rencontre Groupe d'usagers SharePoint Montreal - The Next Great Migration - C...
RISPUG - Top Form - Using PowerApps to Replace List Forms
SPCNA 2018 - Top Form - Using PowerApps to Replace List Forms
SPCNA 2018 - The Next Great Migration - Classic to Modern
SPS New York City 2017 - The Lay of the Land of Client-Side Development circa...
ECS Zagreb 2017 - Content Types - Love Them or Lose It
SPS Monaco 2017 - The Lay of the Land of Client-Side Development circa 2017
Lions Tigers Teams - SPTechCon Austin 2017
Oslo SP User Group - Content Types - Love Them or Lose It
Unity Connect Haarlem 2016 - The Lay of the Land of Client-Side Development c...
SPTechCon Boston 2016 - Creating a Great User Experience in SharePoint
SPTechCon Boston 2016 - Content Types - Love Them or Lose It
SPC Adriatics 2016 - Creating a Great User Experience in SharePoint
SPC Adriatics 2016 - Alternative Approaches to Solution Development in Office...
SharePointFest Konferenz 2016 - Creating a Great User Experience in SharePoint
SharePointFest Konferenz 2016 - Alternative Approaches to Solution Developmen...
SPTechCon Austin 2016 - Content Types-Love Them or Lose It
SPTechCon Austin 2016 - Creating a Great User Experience in SharePoint

Recently uploaded (20)

PPTX
MYSQL Presentation for SQL database connectivity
PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
Big Data Technologies - Introduction.pptx
PDF
Spectral efficient network and resource selection model in 5G networks
PPT
Teaching material agriculture food technology
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Empathic Computing: Creating Shared Understanding
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Encapsulation_ Review paper, used for researhc scholars
DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
MYSQL Presentation for SQL database connectivity
Review of recent advances in non-invasive hemoglobin estimation
Big Data Technologies - Introduction.pptx
Spectral efficient network and resource selection model in 5G networks
Teaching material agriculture food technology
Chapter 3 Spatial Domain Image Processing.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
NewMind AI Weekly Chronicles - August'25 Week I
20250228 LYD VKU AI Blended-Learning.pptx
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Digital-Transformation-Roadmap-for-Companies.pptx
Empathic Computing: Creating Shared Understanding
The Rise and Fall of 3GPP – Time for a Sabbatical?
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
MIND Revenue Release Quarter 2 2025 Press Release
Encapsulation_ Review paper, used for researhc scholars
The AUB Centre for AI in Media Proposal.docx
sap open course for s4hana steps from ECC to s4
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows

SharePointfest Denver - A jQuery Primer for SharePoint

  • 1. A jQuery Primer for SharePoint
  • 4. Getting Started • Add references to the jQuery library – Master page – Page layout – Individual aspx pages
  • 5. Referencing Script Libraries from CDNs <!-- Reference the jQueryUI theme's stylesheet on the Google CDN. Here we're using the "start" theme --> <link type="text/css" rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/theme s/start/jquery-ui.css" /> <!-- Reference jQuery on the Google CDN --> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.mi n.js"></script> <!-- Reference jQueryUI on the Google CDN --> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery -ui.min.js"></script> <!-- Reference SPServices on cdnjs (Cloudflare) --> <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery.SPServices/0.7 .1a/jquery.SPServices-0.7.1a.min.js"></script> More: http://sympmarc.com/2012/04/20/referencing-jquery-jqueryui-and-spservices-from-cdns/
  • 6. SharePoint Web Technology • HTML – Hypertext Markup Language – Content and structure • CSS – Cascading Style Sheets – Presentation and style • JavaScript and jQuery – Interactive behavior
  • 7. HTML Elements Opening tag Closing tag Powered by <a href="http://office365.com">Office365</a>. Attribute Value
  • 9. Intro to CSS: Why does CSS matter? • CSS = Cascading Style Sheets • jQuery uses selectors that are very similar to CSS selectors • CSS is the fundamental styling mechanism for the Web • HTML + CSS + jQuery = AWESOME
  • 10. CSS Styles Select HTML element(s) .article { Modify them! color: red; }
  • 11. CSS Element Selectors p { <p> color: red; Paragraph of text. } </p> Paragraph of text.
  • 12. CSS Class Selectors .article { <div class="article"> color: red; This is an article. } </div> This is an article.
  • 13. CSS ID Selectors #header { <div id="header"> color: red; This is a header. } </div> This is a header.
  • 14. CSS Descendant Selectors #header h1 { <div id="header"> <h1> color: red; This is a header. } </h1> </div> This is a header.
  • 15. CSS Composite Selectors #header ul.top-nav li { <div id="header"> color: red; <ul class="top-nav"> } <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> </ul> </div> • Item 1 • Item 2 • Item 3
  • 16. CSS Complex Selectors ul.top-nav > li { <ul class="top-nav"> <li>Item 1</li> color: red; <li> } Item 2 <ul class="menu"> <li>Menu 1</li> </ul> </li> </ul> • Item 1 • Item 2 • Menu 1
  • 17. My CSS "Best" Practices • Use truly unique class and id names • Choose a prefix for your project, e.g. „xyz-‟ or „x51-‟ • All of your classes and ids will be easy to select: xyz-home-page-article x51-top-section • Don‟t be afraid of verbose class and ID names!
  • 19. What is the Document Object Model (DOM)? • The DOM starts as the page‟s markup (HTML) as delivered to the browser by the server: View Source • Styled by the CSS which gives the page its the look and feel • The DOM is acted upon by any script in the page
  • 20. What Can We Do With the DOM? • Add or remove CSS classes • Create new HTML elements • Remove HTML elements • Change HTML element attributes • And so much more The DOM is HTML, which is XML, which is data!
  • 22. Internet Explorer Developer Tools (F12) • Shows the Internet Explorer view of SharePoint‟s pages – some pages are rendered differently in other browsers
  • 23. The Firebug Add-On for Firefox • Better for debugging and looking at Net traffic
  • 25. The Basic Idea of jQuery Select something $('.article').hide(); Do something!
  • 26. jQuery’s Document Ready $(document).ready(function({ // do something }); • Processing is suspended until the page‟s DOM is fully loaded • Ensures that all of the elements you need are available
  • 27. jQuery Documentation: Your Friend • The jQuery documentation is arranged to help you • What you need to know is arranged sequentially from top to bottom
  • 29. jQuery Selectors • Selectors are the most important jQuery concept • Selecting the right DOM object(s) is half the battle • Selectors return a collection of DOM objects – 1 to n matching elements
  • 30. jQuery Element Selectors <p> Paragraph of text. </p> $("p")
  • 31. jQuery Element Selectors <p>Paragraph 1 of text.</p> <p>Paragraph 2 of text.</p> var allParagraphs = $("p"); allParagraphs is now defined as a jQuery object which contains pointers to all paragraphs in the page
  • 32. jQuery Class Selectors <div class="article"> This is an article. </div> $(".article")
  • 33. jQuery ID Selectors <div id="header"> This is a header. </div> $("#header")
  • 34. jQuery Descendant Selectors <div id="header"> <h1> This is a header. </h1> </div> $("#header h1")
  • 35. jQuery Composite Selectors <div id="header"> <ul class="top-nav"> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> </ul> </div> $("#header ul.top-nav li")
  • 36. jQuery Complex Selectors <ul class="top-nav"> <li>Item 1</li> <li> Item 2 <ul class="menu"> <li>Menu 1</li> </ul> </li> </ul> $("#header ul.top-nav li")
  • 37. Selectors for SharePoint <DIV class=ms-quicklaunchheader> <A accessKey=3 id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll href="/Intranet/JQueryLib/_layouts/viewlsts.aspx"> View All Site Content </A> </DIV> $("div.ms-quicklaunchheader")
  • 38. Selectors for SharePoint <DIV class=ms-quicklaunchheader> <A accessKey=3 id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll href="/Intranet/JQueryLib/_layouts/viewlsts.aspx"> View All Site Content </A> </DIV> $("#ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll")
  • 39. Selectors for SharePoint <DIV class=ms-quicklaunchheader> <A accessKey=3 id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll href="/Intranet/JQueryLib/_layouts/viewlsts.aspx"> View All Site Content </A> </DIV> $("a[id$='NavLinkViewAll']")
  • 40. Useful jQuery Selector Tricks • .NET Applications like SharePoint generate some long and ugly markup and IDs • These selector tricks really help $("[id='foo']"); // Equal to $("[id!='foo']"); // Not equal to $("[id^='foo']"); // Starts with $("[id$='foo']"); // Ends with $("[id*='foo']"); // Contains $("[id~='foo']"); // Contains word $("[id|='foo']"); // Contains prefix $("[id]"); // Has $("[id][class][style]"); // Has all
  • 42. jQuery Attributes • Once you‟ve selected the right DOM element, you can use jQuery to get or set its attributes • As of jQuery 1.6, the .prop() method provides a way to explicitly retrieve property values, while .attr() retrieves attributes
  • 43. jQuery Attributes: Get and Set <div id="helloDiv" class="ms-bold"> Hello, world! </div> GET: var thisClass = $("#helloDiv").attr("class"); SET: $("#helloDiv").attr("class", "ms-hidden");
  • 44. Example with SharePoint Attributes: Get <DIV class=ms-quicklaunchheader> <A accessKey=3 id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll href="/Intranet/JQueryLib/_layouts/viewlsts.aspx"> View All Site Content </A> </DIV> var thisKey = $("a[id$='NavLinkViewAll']").attr("accessKey");
  • 45. Example with SharePoint Attributes: Set <DIV class=ms-quicklaunchheader> <A accessKey=99 id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll href="/Intranet/JQueryLib/_layouts/viewlsts.aspx"> View All Site Content </A> </DIV> $("a[id$='NavLinkViewAll']").attr("accessKey", 99);
  • 47. Traversing • Traversing lets you move around the DOM based on your initial selection • This is how you get at elements which are difficult to select directly • Ancestry matters in XML / HTML
  • 48. Find an Element’s Ancestors <div id="helloDiv" class="ms-bold"> <ul> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> </ul> </div> $("ul").parent(); $("ul").closest("div");
  • 49. Traversing Down: Find an Element’s Specific Children <DIV class=ms-quicklaunchheader> <A accessKey=3 id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll href="/Intranet/JQueryLib/_layouts/viewlsts.aspx"> View All Site Content </A> </DIV> $("div.ms-quicklaunchheader").find("a");
  • 50. Traversing Down: Find an Element’s Specific Children <DIV class=ms-quicklaunchheader> <A accessKey=3 id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll href="/Intranet/JQueryLib/_layouts/viewlsts.aspx"> View All Site Content </A> </DIV> $("div.ms-quicklaunchheader").find("a");
  • 51. SharePoint Example of Traversing: Initial Selector <DIV class=ms-quicklaunchheader> <A accessKey=3 id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll href="/Intranet/JQueryLib/_layouts/viewlsts.aspx"> View All Site Content </A> </DIV> $("a[id$='NavLinkViewAll']").parent();
  • 52. SharePoint Example of Traversing: Finding Parent <DIV class=ms-quicklaunchheader> <A accessKey=3 id=ctl00_PlaceHolderLeftNavBar_idNavLinkViewAll href="/Intranet/JQueryLib/_layouts/viewlsts.aspx"> View All Site Content </A> </DIV> $("a[id$='NavLinkViewAll']").parent();
  • 53. Traversal Example from SPServices SelectCandidate SelectResult <select <select name="ctl00$m$g_e845e690_00da_428f_afbd_fbe80 name="ctl00$m$g_e845e690_00da_428f_afbd_fbe8047 4787763$ctl00$ctl04$ctl07$ctl00$ctl00$ctl04$c 87763$ctl00$ctl04$ctl07$ctl00$ctl00$ctl04$ctl00 var possibleValues = tl00$ctl00$SelectCandidate" title="City $ctl00$SelectResult" title="City selected values" possible values" $("select[ID$='SelectCandidate'][Title^='" + id="ctl00_m_g_e845e690_00da_428f_afbd_fbe8047 id="ctl00_m_g_e845e690_00da_428f_afbd_fbe804787 87763_ctl00_ctl04_ctl07_ctl00_ctl00_ctl04_ctl 763_ctl00_ctl04_ctl07_ctl00_ctl00_ctl04_ctl00_c opt.multiSelectColumn + " ']"); 00_ctl00_SelectCandidate" style="width: tl00_SelectResult" style="width: 162px;" var selectedValues = 162px;" onkeydown="GipHandleHScroll(event)" onkeydown="GipHandleHScroll(event)" ondblclick="GipRemoveSelectedItems(ctl00_m_g_e8 ondblclick="GipAddSelectedItems(ctl00_m_g_e84 possibleValues.closest("span").find("select[ID$='SelectResult 5e690_00da_428f_afbd_fbe804787763_ctl00_ctl04 45e690_00da_428f_afbd_fbe804787763_ctl00_ctl04_ _ctl07_ctl00_ctl00_ctl04_ctl00_ctl00_MultiLoo ctl07_ctl00_ctl00_ctl04_ctl00_ctl00_MultiLookup '][Title^='" + opt.multiSelectColumn + " ']"); kupPicker_m); return false" Picker_m); return false" onchange="GipSelectCandidateItems(ctl00_m_g_e onchange="GipSelectResultItems(ctl00_m_g_e845e6 845e690_00da_428f_afbd_fbe804787763_ctl00_ctl 90_00da_428f_afbd_fbe804787763_ctl00_ctl04_ctl0 04_ctl07_ctl00_ctl00_ctl04_ctl00_ctl00_MultiL 7_ctl00_ctl00_ctl04_ctl00_ctl00_MultiLookupPick ookupPicker_m);" size="350" multiple=""> er_m);" size="20" multiple="">
  • 55. Manipulation • Once you‟ve gotten the right element(s), you can manipulate their attributes or properties • You can also change their contents
  • 56. Manipulation: Adding Text <div id="helloDiv" class="ms-bold"> Hello, world! </div> $("#helloDiv").append("And you're welcome to it!"); <div id="helloDiv" class="ms-bold"> Hello, world! And you're welcome to it! </div>
  • 57. Manipulation: Adding CSS Classes <div id="helloDiv" class="ms-bold"> Hello, world! </div> $("#helloDiv").addClass("my-class"); <div id="helloDiv" class="ms-bold my-class"> Hello, world! </div>
  • 58. Manipulation: Wrapping Elements <div id="helloDiv" class="ms-bold"> Hello, world! </div> $("#helloDiv") .wrap("<a href='http://cnn.com'></a>"); <a href="http://cnn.com"> <div id="helloDiv" class="ms-bold"> Hello, world! </div> </a>
  • 59. Manipulation: Inserting Elements <div id="helloDiv" class="ms-bold"> Hello, world! </div> $("#helloDiv") .before("<div>This is a new div.</div>"); <div>This is a new div.</div> <div id="helloDiv" class="ms-bold"> Hello, world! </div>
  • 60. Manipulation: Changing CSS <div id="helloDiv" class="ms-bold"> Hello, world! </div> $("#helloDiv").css("background-color", "fuchsia"); $("#helloDiv").css({ border: "1px black solid", color: "red" });
  • 62. Events • jQuery‟s events enable you to work with all of the standard JavaScript events • These methods are used to register behaviors to take effect when the user interacts with the browser, and to further manipulate those registered behaviors.
  • 63. jQuery Events $('.article').click(function(){ // do something }); $('.article').mouseover(function(){ // do something });
  • 64. jQuery Events $("h3.ms-WPTitle").click(function() { alert("You'll now be taken directly to the list."); }); $("h3.ms-WPTitle").mouseover(function() { $("#helloDiv").css("background-color", "fuchsia"); });
  • 66. Effects • jQuery gives you a set of effects you can use to change the elements in the page • Effects can be: – Visual: Change how the user sees existing elements with animations – Manipulative: Change where and how elements are shown by moving them around in the DOM
  • 68. Putting It Together: Example • This example changes what happens when you click on a Web Part Title. // Remove the links on the Web Part Titles $("h3.ms-WPTitle").find("nobr").unwrap("<a></a>"); // Add click behavior that toggles the visibility // of the Web Part $("h3.ms-WPTitle").click(function() { $(this).closest("table").closest("tr").next().toggle(); });
  • 69. Putting It Together: Example • This example shows part of SPArrangeChoices from SPServices. // Collect all of the choices $(thisFormField).find("tr").each(function() { columnOptions.push($(this).html()); }); out = "<TR>"; // Add all of the options to the out string for(i=0; i < columnOptions.length; i++) { out += columnOptions[i]; // If we've already got perRow columnOptions in the row, close off the row if((i+1) % opt.perRow === 0) { out += "</TR><TR>"; } } out += "</TR>"; // Remove the existing rows... $(thisFormField).find("tr").remove(); // ...and append the out string $(thisFormField).find("table").append(out);
  • 70. jQueryUI Takes Effects Further $('.article').tabs(); $('input').autocomplete(); $('#infoBox').dialog(); …and many more
  • 71. jQuery Plugins Abound! • If you want to do something sophisticated, look for an existing plugin • Do some due diligence – some of the plugins aren‟t written very well • Beware of “plugin sprawl”
  • 72. More Useful Tools • JavaScript Compressorator – Minifies script files using multiple methods http://compressorrater.thruhere.net/ • JSLint – Checks your script against accepted standards http://jslint.com/ “Warning: JSLint will hurt your feelings.”
  • 73. Contact Information eMail marc.anderson@sympraxisconsulting.com Blog http://sympmarc.com SPServices http://spservices.codeplex.com SPXSLT http://spxslt.codeplex.com USPJA Academy http://uspja.com eBook http://bit.ly/UnlockingDVWP The Middle Tier Manifesto http://bit.ly/middletier