How can I convert this JavaScript to jQuery?
I'm trying to implement localStorage
into one of my projects, but I'm having a problem because this portion of the code breaks my jQuery ui-layout.
function $(id) {
return document.getElementById(id);
}
In order to make the layout work, I have to add a $
:
$(document).ready(function($) {
Being that I don't know how to write javascript or jquery, I can only implement it, can the code below be written in a way that I can avoid using the "function $(id)" part and the "$开发者_运维技巧"?
Here is the code in its entirety:
// return value - this the prob?
function $(id) {
return document.getElementById(id);
}
// write data to the local storage
function writeLocal() {
var key = $('lsKey').value;
var data = $('html').value;
localStorage.setItem(key, data);
updateItemsList();
}
// remove the item from localStorage
function deleteLocal(keyName) {
localStorage.removeItem(keyName);
updateItemsList();
}
// read the actual data for the key from localStorage
function readLocal(keyName) {
$('lsKey').value = keyName;
$('html').value = localStorage.getItem(keyName);
}
// allow retrieval of localStorage items
function updateItemsList() {
var items = localStorage.length;
var s = '<p>Saved Items</p>';
s+= '<ul>';
for (var i=0; i<items; i++) {
var keyName = localStorage.key(i);
s+= '<li class="lsdLI">' +
'<div style="float:right;">' +
'<input onClick="readLocal(\''+keyName+'\');"/>'+
'<input onClick="deleteLocal(\''+keyName+'\');"/>'+
'</div>'+
'<b>'+keyName+'</b>' +
'</li>';
}
$('lsValues').innerHTML = s + '</ul>';
}
// start by loading up whatever is persistant in localStorage
function load() {
updateItemsList();
}
window.onload = load;
So it sounds like you are using jquery UI and it's causing a conflict. Easiest thing to do might just be renaming the $ convenience function you are using...
// return value - this the prob?
function $$(id) {
return document.getElementById(id);
}
// write data to the local storage
function writeLocal() {
var key = $$('lsKey').value;
var data = $$('html').value;
localStorage.setItem(key, data);
updateItemsList();
}
// remove the item from localStorage
function deleteLocal(keyName) {
localStorage.removeItem(keyName);
updateItemsList();
}
// read the actual data for the key from localStorage
function readLocal(keyName) {
$$('lsKey').value = keyName;
$$('html').value = localStorage.getItem(keyName);
}
// allow retrieval of localStorage items
function updateItemsList() {
var items = localStorage.length;
var s = '<p>Saved Items</p>';
s+= '<ul>';
for (var i=0; i<items; i++) {
var keyName = localStorage.key(i);
s+= '<li class="lsdLI">' +
'<div style="float:right;">' +
'<input onClick="readLocal(\''+keyName+'\');"/>'+
'<input onClick="deleteLocal(\''+keyName+'\');"/>'+
'</div>'+
'<b>'+keyName+'</b>' +
'</li>';
}
$$('lsValues').innerHTML = s + '';
}
// start by loading up whatever is persistant in localStorage
function load() {
updateItemsList();
}
window.onload = load;
It wouldn't be hard to convert what you have into jQuery either, but simply grabbing the first item out of each jQuery object.
// write data to the local storage
function writeLocal() {
var key = $('lsKey')[0].value;
var data = $('html')[0].value;
localStorage.setItem(key, data);
updateItemsList();
}
// remove the item from localStorage
function deleteLocal(keyName) {
localStorage.removeItem(keyName);
updateItemsList();
}
// read the actual data for the key from localStorage
function readLocal(keyName) {
$('lsKey')[0].value = keyName;
$('html')[0].value = localStorage.getItem(keyName);
}
// allow retrieval of localStorage items
function updateItemsList() {
var items = localStorage.length;
var s = '<p>Saved Items</p>';
s+= '<ul>';
for (var i=0; i<items; i++) {
var keyName = localStorage.key(i);
s+= '<li class="lsdLI">' +
'<div style="float:right;">' +
'<input onClick="readLocal(\''+keyName+'\');"/>'+
'<input onClick="deleteLocal(\''+keyName+'\');"/>'+
'</div>'+
'<b>'+keyName+'</b>' +
'</li>';
}
$('lsValues')[0].innerHTML = s + '';
}
// start by loading up whatever is persistant in localStorage
function load() {
updateItemsList();
}
window.onload = load;
Beyond those two options, you'd be looking at changing your code a bit more to truly do things the jQuery way. Instead of $('lsKey').value it would be $('lsKey').val(), etc. You'd have to update your code to use all the jQuery methods.
You should define your functions first, then import the jquery library. You can then make this call
$.noConflict();
And it will keep the $ variable as it was before you imported jquery. After that, you can access jquery with the following:
jQuery(document).ready(function($) {
// Code that uses jQuery's $ can follow here.
});
So you can use jquery's $ variable inside that function (or any function which you pass jQuery as the argument) and use your own $ variable outside.
You can read more on the topic here: http://api.jquery.com/jQuery.noConflict/
精彩评论