/*
jshint newcap:false
*/
/**
* jqMobi is a query selector class for HTML5 mobile apps on a WebkitBrowser.
* Since most mobile devices (Android, iOS, webOS) use a WebKit browser, you only need to target one browser.
* We are able to increase the speed greatly by removing support for legacy desktop browsers and taking advantage of browser features, like native JSON parsing and querySelectorAll
* MIT License
* @author AppMobi
*/
if (!window.jq || typeof (jq) !== "function") {
var jq = (function(window) {
"use strict";
var undefined,
document = window.document,
emptyArray = [],
slice = emptyArray.slice,
classCache = [],
eventHandlers = [],
_eventID = 1,
jsonPHandlers = [],
_jsonPID = 1;
function classRE(name) {
return name in classCache ? classCache[name] : (classCache[name] = new RegExp('(^|\\s)' + name + '(\\s|$)'));
}
function unique(arr) {
for (var i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) != i) {
arr.splice(i, 1);
continue;
}
}
return arr;
}
function siblings(nodes, element) {
var elems = [];
if (nodes == undefined)
return elems;
for (; nodes; nodes = nodes.nextSibling)
{
if (nodes.nodeType == 1 && nodes !== element)
{
elems.push(nodes);
}
}
return elems;
}
var $jqm = function(toSelect, what) {
this.length = 0;
if (!toSelect) {
return this;
}
else if (toSelect instanceof $jqm && what == undefined) {
return toSelect;
}
else if ($.isFunction(toSelect)) {
return $(document).ready(toSelect);
}
else if ($.isArray(toSelect) && toSelect.length != undefined) //Passing in an array or object
{
for (var i = 0; i < toSelect.length; i++)
this[this.length++] = toSelect[i];
return this;
}
else if ($.isObject(toSelect) && $.isObject(what)) //var tmp=$("span"); $("p").find(tmp);
{
if (toSelect.length == undefined)
{
if (toSelect.parentNode == what)
this[this.length++] = toSelect;
}
else {
for (var i = 0; i < toSelect.length; i++)
if (toSelect[i].parentNode == what)
this[this.length++] = toSelect[i];
}
return this;
}
else if ($.isObject(toSelect) && what == undefined) { //Single object
this[this.length++] = toSelect;
return this;
}
else if (what !== undefined) {
if (what instanceof $jqm) {
return what.find(toSelect);
}
}
else {
what = document;
}
var dom = this.selector(toSelect, what);
if (!dom) {
return this;
}
//reverse the query selector all storage
else if ($.isArray(dom)) {
for (var j = 0; j < dom.length; j++) {
this[this.length++] = dom[j];
}
}
else {
this[this.length++] = dom;
return this;
}
return this;
};
var $ = function(selector, what) {
return new $jqm(selector, what);
};
function _selector(selector, what) {
var dom;
try {
if (selector[0] === "#" && selector.indexOf(" ") === -1 && selector.indexOf(">") === -1) {
if (what == document)
dom = what.getElementById(selector.replace("#", ""));
else
dom = [].slice.call(what.querySelectorAll(selector));
}
else if (selector[0] === "<" && selector[selector.length - 1] === ">") //html
{
var tmp = document.createElement("div");
tmp.innerHTML = selector.trim();
dom = [].slice.call(tmp.childNodes);
}
else {
dom = [].slice.call(what.querySelectorAll(selector));
}
}
catch (e) {
}
return dom;
}
$.map = function(elements, callback) {
var value, values = [],
i, key;
if ($.isArray(elements))
for (i = 0; i < elements.length; i++) {
value = callback(elements[i], i);
if (value !== undefined)
values.push(value);
}
else if ($.isObject(elements))
for (key in elements) {
if (!elements.hasOwnProperty(key))
continue;
value = callback(elements[key], key);
if (value !== undefined)
values.push(value);
}
return $([values]);
};
$.each = function(elements, callback) {
var i, key;
if ($.isArray(elements))
for (i = 0; i < elements.length; i++) {
if (callback(i, elements[i]) === false)
return elements;
}
else if ($.isObject(elements))
for (key in elements) {
if (!elements.hasOwnProperty(key))
continue;
if (callback(key, elements[key]) === false)
return elements;
}
return elements;
};
$.extend = function(target) {
if (target == undefined)
target = this;
if (arguments.length === 1) {
for (var key in target)
this[key] = target[key];
return this;
}
else {
slice.call(arguments, 1).forEach(function(source) {
for (var key in source)
target[key] = source[key];
});
}
return target;
};
$.isArray = function(obj) {
return obj!=undefined&&Array.isArray(obj);
};
$.isFunction = function(obj) {
return obj!=undefined&&typeof obj === "function";
};
$.isObject = function(obj) {
return obj!=undefined&&typeof obj === "object";
}
$.fn = $jqm.prototype = {
constructor: $jqm,
forEach: emptyArray.forEach,
reduce: emptyArray.reduce,
push: emptyArray.push,
indexOf: emptyArray.indexOf,
concat: emptyArray.concat,
selector: _selector,
oldElement: undefined,
slice: emptyArray.slice,
setupOld: function(params) {
if (params == undefined)
return $();
params.oldElement = this;
return params;
},
map: function(fn) {
return $.map(this, function(el, i) {
return fn.call(el, i, el);
});
},
each: function(callback) {
this.forEach(function(el, idx) {
callback.call(el, idx, el);
});
return this;
},
ready: function(callback) {
if (document.readyState === "complete" || document.readyState === "loaded")
callback();
document.addEventListener("DOMContentLoaded", callback, false);
return this;
},
find: function(sel) {
if (this.length === 0)
return undefined;
var elems = [];
var tmpElems;
for (var i = 0; i < this.length; i++)
{
tmpElems = ($(sel, this[i]));
for (var j = 0; j < tmpElems.length; j++)
{
elems.push(tmpElems[j]);
}
}
return $(unique(elems));
},
html: function(html) {
if (this.length === 0)
return undefined;
if (html === undefined)
return this[0].innerHTML;
for (var i = 0; i < this.length; i++) {
this[i].innerHTML = html;
}
return this;
},
text: function(text) {
if (this.length === 0)
return undefined;
if (text === undefined)
return this[0].textContent;
for (var i = 0; i < this.length; i++) {
this[i].textContent = text;
}
return this;
},
css: function(attribute, value) {
if (this.length === 0)
return undefined;
if (value === undefined && typeof (attribute) === "string") {
var styles = window.getComputedStyle(this[0]);
return styles[attribute] ? styles[attribute] : this[0].style[attribute];
}
for (var i = 0; i < this.length; i++) {
if ($.isObject(attribute)) {
for (var j in attribute) {
this[i].style[j] = attribute[j];
}
}
else {
this[i].style[attribute] = value;
}
}
return this;
},
empty: function() {
for (var i = 0; i < this.length; i++) {
this[i].innerHTML = '';
}
return this;
},
hide: function() {
if (this.length === 0)
return undefined;
for (var i = 0; i < this.length; i++) {
if (this[i].style.display != "none") {
this[i].setAttribute("jqmOldStyle", this[i].style.display);
this[i].style.display = "none";
}
}
return this;
},
show: function() {
if (this.length === 0)
return undefined;
for (var i = 0; i < this.length; i++) {
if (this[i].style.display == "none") {
this[i].style.display = this[i].getAttribute("jqmOldStyle") ? this[i].getAttribute("jqmOldStyle") : 'block';
this[i].removeAttribute("jqmOldStyle");
}
}
return this;
},
toggle: function(show) {
var show2 = show === true ? true : false;
for (var i = 0; i < this.length; i++) {
if (this[i].style.display !== "none" || (show !== undefined && show2 === false)) {
this[i].setAttribute("jqmOldStyle", this[i].style.display)
this[i].style.display = "none";
}
else {
this[i].style.display = this[i].getAttribute("jqmOldStyle") !== "" ? this[i].getAttribute("jqmOldStyle") : 'block';
this[i].removeAttribute("jqmOldStyle");
}
}
return this;
},
val: function(value) {
if (this.length === 0)
return undefined;
if (value == undefined)
return this[0].value;
for (var i = 0; i < this.length; i++) {
this[i].value = value;
}
return this;
},
attr: function(attr, value) {
if (this.length === 0)
return undefined;
if (value === undefined && !$.isObject(attr)) {
var val = this[0].getAttribute(attr);
try {
val = JSON.parse(val);
} catch (e) {
}
return val;
}
value = $.isArray(value) || $.isObject(value) ? JSON.stringify(value) : value;
for (var i = 0; i < this.length; i++) {
if ($.isObject(attr)) {
for (var key in attr)
{
if (value == null && value !== undefined)
this[i].removeAttribute(key);
else
this[i].setAttribute(key, attr[key]);
}
}
else
if (value == null && value !== undefined)
this[i].removeAttribute(attr);
else
this[i].setAttribute(attr, value);
}
return this;
},
removeAttr: function(attr) {
var that = this;
for (var i = 0; i < this.length; i++) {
attr.split(/\s+/g).forEach(function(param) {
that[i].removeAttribute(param);
});
}
return this;
},
remove: function(selector) {
var elems = $(this).filter(selector);
for (var i = 0; i < elems.length; i++) {
elems[i].parentNode.removeChild(elems[i]);
}
return elems;
},
addClass: function(name) {
for (var i = 0; i < this.length; i++) {
var cls = this[i].className;
var classList = [];
var that = this;
name.split(/\s+/g).forEach(function(cname) {
if (!that.hasClass(cname, that[i]))
classList.push(cname);
});
this[i].className += (cls ? " " : "") + classList.join(" ");
this[i].className = this[i].className.trim();
}
return this;
},
removeClass: function(name) {
for (var i = 0; i < this.length; i++) {
if (name == undefined) {
this[i].className = '';
return this;
}
var classList = this[i].className;
name.split(/\s+/g).forEach(function(cname) {
classList = classList.replace(classRE(cname), "");
});
if (classList.length > 0)
this[i].className = classList.trim();
else
this[i].className = "";
}
return this;
},
hasClass: function(name, element) {
if (this.length === 0)
return false;
if (!element)
element = this[0];
return classRE(name).test(element.className);
},
bind: function(event, callback) {
if (event === "" || event == undefined)
return;
for (var i = 0; i < this.length; i++) {
(function(obj) {
var id = obj._eventID ? obj._eventID : _eventID++;
obj._eventID = id;
var that = obj;
event.split(/\s+/g).forEach(function(name) {
var prxFn = function(event) {
event.originalEvent = event; //for backwards compatibility with jQuery...leh sigh
var result = callback.call(that, event);
if (result === false)
event.preventDefault();
return result;
};
eventHandlers[id + "_" + name] = prxFn;
obj.addEventListener(name, prxFn, false);
});
})(this[i]);
}
return this;
},
unbind: function(event) {
if (event === "" || event == undefined)
return;
for (var i = 0; i < this.length; i++) {
(function(obj) {
var id = obj._eventID;
var that = obj;
event.split(/\s+/g).forEach(function(name) {
if (eventHandlers[id + "_" + name]) {
var prxFn = eventHandlers[id + "_" + name];
delete eventHandlers[id + "_" + name];
that.removeEventListener(name, prxFn, false);
}
});
})(this[i]);
}
return this;
},
trigger: function(event, data) {
if (this.length === 0)
return this;
if (typeof (event) === "string") {
var evtName = event;
var newEvent = document.createEvent("Event");
newEvent.type = evtName;
newEvent.target = this[0];
newEvent.initEvent(evtName, false, true);
}
else
var newEvent = event;
newEvent.data = data;
this[0].dispatchEvent(newEvent);
return this;
},
append: function(element, insert) {
if (element && element.length != undefined && element.length === 0)
return this;
if ($.isArray(element) || $.isObject(element))
element = $(element);
var i;
for (i = 0; i < this.length; i++) {
if (element.length && typeof element != "string") {
element = $(element);
for (var j = 0; j < element.length; j++)
insert != undefined ? this[i].insertBefore(element[j], this[i].firstChild) : this[i].appendChild(element[j]);
}
else {
var obj = $(element).get();
if (obj == undefined || obj.length == 0) {
obj = document.createTextNode(element);
}
if (obj.nodeName != undefined && obj.nodeName.toLowerCase() == "script" && (!obj.type || obj.type.toLowerCase() === 'text/javascript')) {
window.eval(obj.innerHTML);
}
else
insert != undefined ? this[i].insertBefore(obj, this[i].firstChild) : this[i].appendChild(obj);
}
}
return this;
},
prepend: function(element) {
return this.append(element, 1);
},
get: function(index) {
index = index == undefined ? 0 : index;
if (index < 0)
index += this.length;
return (this[index]) ? this[index] : undefined;
},
offset: function() {
if (this.length === 0)
return undefined;
var obj = this[0].getBoundingClientRect();
return {
left: obj.left + window.pageXOffset,
top: obj.top + window.pageYOffset,
width: parseInt(this[0].style.width),
height: parseInt(this[0].style.height)
};
},
parent: function(selector) {
if (this.length == 0)
return undefined;
var elems = [];
for (var i = 0; i < this.length; i++)
{
if (this[i].parentNode)
elems.push(this[i].parentNode);
}
return this.setupOld($(unique(elems)).filter(selector));
},
children: function(selector) {
if (this.length == 0)
return undefined;
var elems = [];
for (var i = 0; i < this.length; i++)
{
elems = elems.concat(siblings(this[i].firstChild));
}
return this.setupOld($((elems)).filter(selector));
},
siblings: function(selector) {
if (this.length == 0)
return undefined;
var elems = [];
for (var i = 0; i < this.length; i++)
{
if (this[i].parentNode)
elems = elems.concat(siblings(this[i].parentNode.firstChild, this[i]));
}
return this.setupOld($(elems).filter(selector));
},
closest: function(selector, context) {
if (this.length == 0)
return undefined;
var elems = [], cur = this[0];
var start = $(selector, context);
if (start.length == 0)
return $();
while (cur && start.indexOf(cur) == -1) {
cur = cur !== context && cur !== document && cur.parentNode;
}
return $(cur);
},
filter: function(selector)
{
if (this.length == 0)
return undefined;
if (selector == undefined)
return this;
var elems = [];
for (var i = 0; i < this.length; i++) {
var val = this[i];
if (val.parentNode && $(selector, val.parentNode).indexOf(val) >= 0)
elems.push(val);
}
return this.setupOld($(unique(elems)));
},
not: function(selector) {
if (this.length == 0)
return undefined;
var elems = [];
for (var i = 0; i < this.length; i++) {
var val = this[i];
if (val.parentNode && $(selector, val.parentNode).indexOf(val) == -1)
elems.push(val);
}
return this.setupOld($(unique(elems)));
},
data: function(key, value) {
return this.attr('data-' + key, value);
},
end: function() {
return this.oldElement != undefined ? this.oldElement : $();
},
clone: function(deep) {
deep = deep === false ? false : true;
if (this.length == 0)
return undefined;
var elems = [];
for (var i = 0; i < this.length; i++)
{
elems.push(this[i].cloneNode(deep));
}
return $(elems);
},
size: function() {
return this.length;
}
};
/* AJAX functions */
function empty() {
}
var ajaxSettings = {
type: 'GET',
beforeSend: empty,
success: empty,
error: empty,
complete: empty,
context: undefined,
timeout: 0
};
$.jsonP = function(options) {
var callbackName = 'jsonp_callback' + (++_jsonPID);
var abortTimeout = "",
context;
var script = document.createElement("script");
var abort = function() {
$(script).remove();
if (window[callbackName])
window[callbackName] = empty;
};
window[callbackName] = function(data) {
clearTimeout(abortTimeout);
$(script).remove();
delete window[callbackName];
options.success.call(context, data);
};
script.src = options.url.replace(/=\?/, '=' + callbackName);
$('head').append(script);
if (options.timeout > 0)
abortTimeout = setTimeout(function() {
options.error.call(context, "", 'timeout');
}, options.timeout);
return {};
};
$.ajax = function(opts) {
var xhr;
try {
xhr = new window.XMLHttpRequest();
var settings = opts || {};
for (var key in ajaxSettings) {
if (!settings[key])
settings[key] = ajaxSettings[key];
}
if (!settings.url)
settings.url = window.location;
if (!settings.contentType)
settings.contentType = "application/x-www-form-urlencoded";
if (!settings.headers)
settings.headers = {};
settings.headers = $.extend({
'X-Requested-With': 'XMLHttpRequest'
}, settings.headers);
if (!settings.dataType)
settings.dataType = "text/html";
else {
switch (settings.dataType) {
case "script":
settings.dataType = 'text/javascript, application/javascript';
break;
case "json":
settings.dataType = 'application/json';
break;
case "xml":
settings.dataType = 'application/xml, text/xml';
break;
case "html":
settings.dataType = 'text/html';
break;
case "text":
settings.dataType = 'text/plain';
break;
default:
settings.dataType = "text/html";
break;
case "jsonp":
return $.jsonP(opts);
break;
}
}
if ($.isObject(settings.data))
settings.data = $.param(settings.data);
if (settings.type.toLowerCase() === "get" && settings.data) {
if (settings.url.indexOf("?") === -1)
settings.url += "?" + settings.data;
else
settings.url += "&" + settings.data;
}
if (/=\?/.test(settings.url)) {
return $.jsonP(settings);
}
var abortTimeout;
var context = settings.context;
xhr.onreadystatechange = function() {
var mime = settings.dataType;
if (xhr.readyState === 4) {
clearTimeout(abortTimeout);
var result, error = false;
if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 0) {
if (mime === 'application/json' && !(/^\s*$/.test(xhr.responseText))) {
try {
result = JSON.parse(xhr.responseText);
} catch (e) {
error = e;
}
} else
result = xhr.responseText;
if (error)
settings.error.call(context, xhr, 'parsererror', error);
else {
settings.success.call(context, result, 'success', xhr);
}
} else {
error = true;
settings.error.call(context, xhr, 'error');
}
settings.complete.call(context, xhr, error ? 'error' : 'success');
}
};
xhr.open(settings.type, settings.url, true);
if (settings.contentType)
settings.headers['Content-Type'] = settings.contentType;
for (var name in settings.headers)
xhr.setRequestHeader(name, settings.headers[name]);
if (settings.beforeSend.call(context, xhr, settings) === false) {
xhr.abort();
return false;
}
if (settings.timeout > 0)
abortTimeout = setTimeout(function() {
xhr.onreadystatechange = empty;
xhr.abort();
settings.error.call(context, xhr, 'timeout');
}, settings.timeout);
xhr.send(settings.data);
}
catch (e) {
console.log(e);
}
return xhr;
};
$.get = function(url, success) {
return this.ajax({
url: url,
success: success
});
};
$.post = function(url, data, success, dataType) {
if (typeof (data) === "function") {
success = data;
data = {};
}
if (dataType === undefined)
dataType = "html";
return this.ajax({
url: url,
type: "POST",
data: data,
dataType: dataType,
success: success
});
};
$.getJSON = function(url, data, success) {
if (typeof (data) === "function") {
success = data;
data = {};
}
return this.ajax({
url: url,
data: data,
success: success,
dataType: "json"
});
};
$.param = function(obj, prefix) {
var str = [];
if (obj instanceof $jqm) {
obj.each(function() {
var k = prefix ? prefix + "[]" : this.id,
v = this.value;
str.push((k) + "=" + encodeURIComponent(v));
});
}
else {
for (var p in obj) {
var k = prefix ? prefix + "[" + p + "]" : p,
v = obj[p];
str.push($.isObject(v) ? $.param(v, k) : (k) + "=" + encodeURIComponent(v));
}
}
return str.join("&");
};
$.parseJSON = function(string) {
return JSON.parse(string);
};
$.parseXML = function(string) {
return (new DOMParser).parseFromString(string, "text/xml");
};
function detectUA($, userAgent) {
$.os = {};
$.os.webkit = userAgent.match(/WebKit\/([\d.]+)/) ? true : false;
$.os.android = userAgent.match(/(Android)\s+([\d.]+)/) || userAgent.match(/Silk-Accelerated/) ? true : false;
$.os.ipad = userAgent.match(/(iPad).*OS\s([\d_]+)/) ? true : false;
$.os.iphone = !$.os.ipad && userAgent.match(/(iPhone\sOS)\s([\d_]+)/) ? true : false;
$.os.webos = userAgent.match(/(webOS|hpwOS)[\s\/]([\d.]+)/) ? true : false;
$.os.touchpad = $.os.webos && userAgent.match(/TouchPad/) ? true : false;
$.os.ios = $.os.ipad || $.os.iphone;
$.os.blackberry = userAgent.match(/BlackBerry/) || userAgent.match(/PlayBook/) ? true : false;
$.os.opera = userAgent.match(/Opera Mobi/) ? true : false;
$.os.fennec = userAgent.match(/fennec/i) ? true : false;
}
detectUA($, navigator.userAgent);
$.__detectUA = detectUA; //needed for unit tests
if (typeof String.prototype.trim !== 'function') {
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/, '');
};
}
return $;
})(window);
'$' in window || (window.$ = jq);
}
分享到:
相关推荐
4. **轻量化**:由于jq.mobi 和 jq.ui 都是为移动设备设计的,所以它们的代码体积小,加载速度快,对设备资源的需求较低。 5. **易于集成**:jq.ui 可以方便地与其他JavaScript库(如jQuery)集成,为开发者提供了...
jq.mobi.min.js主体文件,性能优异
jQ.Mobi与Sencha Touch、JQTouch一样属于JavaScript框架。但不同的是,后两者基于HTML4且源于网页浏览器,jQ.Mobi是基于HTML5重写的jQuery 框架。在手机上运行效率那是相当给力。
jq.ui是jq.mobi的一部分,js文件
** jq.mobile 模板详解:打造高效WebAPP开发** `jq.mobile` 是 jQuery 家族中的一个成员,专为移动设备设计,它提供了一套完整的框架来构建触控优化的 Web 应用程序(WebAPP)。jq.mobile 提供了丰富的交互效果、...
jq.appframework.js 使用jquery 和afui 开发,而不必局限于appframework.js 可以参考我的博客:http://blog.csdn.net/vincentblog/article/details/38041609
**Node.js与jq.node** Node.js是一个开源、跨平台的JavaScript运行环境,它允许开发者在服务器端执行JavaScript代码。Node.js基于Chrome V8引擎,因此它具有高性能和高效率的特点,广泛应用于构建网络应用、实时...
5. 非侵入性:jq.validate的验证逻辑不会影响到原有的HTML结构,保持了代码的清晰度。 三、使用步骤 1. 引入依赖:首先,需要引入jQuery库和jquery.validate.js文件,确保页面中已经加载了这两个资源。 2. 初始化...
`JQ.jquery-confirm`是一个基于jQuery的插件,它为网页开发者提供了功能丰富的对话框和确认/取消框解决方案。这个插件不仅提供了基本的提示功能,还具有高度自定义和交互性的特点,可以满足各种复杂的用户交互需求。...
标题中的“确认按钮弹出框jq.zip”表明这是一个关于使用jQuery实现确认按钮弹出框的示例代码包。在这个项目中,我们很可能会看到如何利用jQuery的交互功能来创建一个用户友好的对话框,用于在执行关键操作前获取用户...
`jq`是一款强大的命令行JSON处理器,用于在命令行界面中查看、操作和转换JSON数据。这个`jq安装包rpm.rar`是一个包含了`jq`工具的RPM(Red Hat Package Manager)格式的压缩包,主要面向使用Linux发行版如CentOS、...
在"nacl_sdk_jq.zip"这个压缩包中,我们可能找到以下内容: 1. **工具**: 包含了构建系统(如gyp)、编译器、链接器和其他必要的构建工具,用于将源代码编译为可以在浏览器中运行的NaCl模块。 2. **库**: 提供了...
javascript代码-使用代码解决fnErrorFlash(args) - 错误闪烁背景色提示.jq的源代码 ——学习参考资料:仅用于个人学习使用!
- **文件**:`jq.mobi.min.js` - **功能**: - 提供了高效的DOM操作能力。 - 支持基于CSS选择器的元素选取。 - 不会覆盖预先存在的 `$` 对象,从而避免与其它使用相同符号的库发生冲突。 ##### 2.2 **jqUi** - *...
jq.node-成为Shell英雄,获得超能力 jq.node是您外壳程序中JavaScript和Lodash(以及1.45M npm模块)。 这是一个功能强大的命令行JSON /字符串处理器。 如此简单,感觉就像是欺骗了您内在的sysadmin。 合理的 我是...
在“java后台jq.rar”这个压缩包中,我们可以推测它可能包含了与Java后台开发相关的代码示例或项目资料。下面将详细阐述Java后台开发以及与其相关的MySQL、SQL、SSH和MVC框架。 1. **Java**:Java是一种跨平台的...
《jq-1.5:Linux下强大的JSON数据解析利器》 在信息技术日新月异的今天,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,已经广泛应用于各种网络服务和应用程序之间。而在Linux环境中,jq-1.5则...
官方离线安装包,亲测可用
"DW网页设计JQ源代码截图效果"这一主题,意味着我们将探讨如何利用jQuery在Dreamweaver(简称DW)这款强大的网页设计工具中实现动态的屏幕截图功能。 Dreamweaver是Adobe公司推出的一款集成开发环境,适用于HTML、...
8. **源代码结构**:从 "jq.cr-master" 文件名推测,项目可能包含以下组成部分:源代码文件(.cr 结尾)、配置文件(如 .gitignore、Gemfile)、测试文件(.spec 结尾)、README 文件、构建脚本(如 shard.yml、...