jQuery.autocomplete = function(input, options) {
// 自分自身へのリンクを作成します
var me = this;
// 入力要素の jQuery オブジェクトを作成します
var $input = $(input).attr("autocomplete", "off");
// 必要に応じて inputClass を適用します
if (options.inputClass) $input.addClass(options.inputClass);
// 結果を作成します
var results = document.createElement("div");
// 結果の jQuery オブジェクトを作成します
var $results = $(results);
$results.hide().addClass(options.resultsClass).css("位置", "絶対");
if (options.width > 0) $results.css("width", options.width);
// body 要素に追加
$("body").append(results);
input.autocompleter = 私;
var timeout = null;
var prev = "";
var active = -1;
var キャッシュ = {};
var keyb = false;
var hasFocus = false;
var lastKeyPressCode = null;
// キャッシュをフラッシュします
function flashCache() {
cache = {};
cache.data = {};
cache.length = 0;
};
// キャッシュをフラッシュします
flushCache();
// 指定されたデータ配列がある場合
if (options.data != null) {
var sFirstChar = "", stMatchSets = {}, row = [];
// URL が指定されていません。ローカル データ ストアに適合するようにキャッシュの長さを調整する必要があります。
if (typeof options.url != "string") options.cacheLength = 1;
// 配列をループしてルックアップ構造体を作成します
for (var i = 0; i // row が文字列の場合、配列を作成しますそれ以外の場合は、配列を参照するだけです
row = ((typeof options.data[i] == "string") ? [options.data[i]] : options.data[i]);
// 長さがゼロの場合、リストに追加しません
if (row[0].length > 0) {
// 最初の文字を取得します
sFirstChar = row[0 ].substring(0, 1).toLowerCase();
// この文字の検索配列が存在しない場合は、今すぐ検索します
if (!stMatchSets[sFirstChar]) stMatchSets[sFirstChar] = [];
// 一致が文字列の場合
stMatchSets[sFirstChar].push(row);
}
}
// データ項目をキャッシュに追加します
for (var k in stMatchSets) {
// キャッシュ サイズを増やします
options.cacheLength ;
// キャッシュに追加します
addToCache(k, stMatchSets[k]);
}
}
$input
.keydown(function(e) {
// 最後に押されたキーを追跡
lastKeyPressCode = e.keyCode;
switch (e.keyCode ) {
ケース 38: // アップ
e.preventDefault();
break;
ケース 40: // ダウン
e.preventDefault( );
moveSelect(1);
break;
case 9: // タブ
case 13: // return
if (selectCurrent()) {
//現在のフィールドをぼかす
$input.get(0).blur();
e.preventDefault();
default:
active = - 1;
if (タイムアウト) clearTimeout(timeout);
timeout(function() { onChange(); },
break;
})
.focus(function() {
// フィールドにフォーカスがあるかどうかを追跡します。フィールドにフォーカスがなくなった場合は結果を処理すべきではありません
hasFocus = true;
})
.blur(function() {
// フィールドにフォーカスがあるかどうかを追跡します
hasFocus = false;
hideResults();
})
.bind("input", function( ) {
// @hack:Firefox での中国語入力のサポート
onChange(0, true)
});
hideResultsNow();
function onChange() {
// 次のキーが押された場合は無視します: [del] [shift] [capslock]
if (lastKeyPressCode == 46 || (lastKeyPressCode > 8 && lastKeyPressCode var v = $input.val();
if (v == prev) return;
前 = v;
if (v.length >= options.minChars) {
$input.addClass(options.loadingClass);
requestData(v);
} else {
$input.removeClass(options.loadingClass);
$results.hide();
}
};
function moveSelect(step) {
var lis = $("li", results);
if (!lis) return;
アクティブ = ステップ;
if (アクティブ アクティブ = 0;
} else if (active >= lis.size()) {
active = lis.size() - 1;
}
lis.removeClass("ac_over");
$(lis[active]).addClass("ac_over");
// IE の奇妙な動作
// if (lis[active] && lis[active].scrollIntoView) {
// lis[active].scrollIntoView(false);
// }
};
function selectCurrent() {
var li = $("li.ac_over", results)[0];
if (!li) {
var $li = $("li", results);
if (options.selectOnly) {
if ($li.length == 1) li = $li[0];
} else if (options.selectFirst) {
li = $li[0];
}
}
if (li) {
selectItem(li);
true を返します。
} else {
return false;
}
};
function selectItem(li) {
if (!li) {
li = document.createElement("li");
li.extra = [];
li.selectValue = "";
}
var v = $.trim(li.selectValue ? li.selectValue : li.innerHTML);
input.lastSelected = v;
前 = v;
$results.html("");
$input.val(v);
hideResultsNow();
if (options.onItemSelect) setTimeout(function() { options.onItemSelect(li) }, 1);
};
// 入力文字列の一部を選択します
function createSelection(start, end) {
// 入力要素への参照を取得します
var field = $input.get(0);
if (field.createTextRange) {
var selRange = field.createTextRange();
selRange.collapse(true);
selRange.moveStart("文字", start);
selRange.moveEnd("文字", end);
selRange.select();
} else if (field.setSelectionRange) {
field.setSelectionRange(start, end);
} else {
if (field.selectionStart) {
field.selectionStart = start;
field.selectionEnd = 終了;
}
}
field.focus();
};
// 最初に一致したものを入力ボックスに入力します (最も一致すると想定されます)
function autoFill(sValue) {
// 最後に押されたユーザー キーがバックスペースだった場合、自動入力しません
if (lastKeyPressCode != 8) {
// 値を入力します (ユーザーが入力した大文字と小文字はそのままにしておきます)
$input.val($input.val() sValue.substring(prev.length) ));
// ユーザーが入力していない値の部分を選択します (次の文字が消去されます)
createSelection(prev.length, sValue.length);
}
};
function showResults() {
// 今すぐ入力フィールドの位置を取得します (DOM がシフトされた場合に備えて)
var pos = findPos(input);
// 指定された幅を使用するか、フォーム要素に基づいて自動計算します
var iWidth = (options.width > 0) ? options.width : $input.width();
// 位置を変更します
$results.css({
width: parseInt(iWidth) "px",
top: (pos.y input.offsetHeight) "px",
left: pos.x "px"
}).show();
};
function HideResults() {
if (タイムアウト) clearTimeout(タイムアウト);
タイムアウト = setTimeout(hideResultsNow, 200);
};
function HideResultsNow() {
if (タイムアウト) clearTimeout(タイムアウト);
$input.removeClass(options.loadingClass);
if ($results.is(":visible")) {
$results.hide();
}
if (options.mustMatch) {
var v = $input.val();
if (v != input.lastSelected) {
selectItem(null);
}
}
};
function acceptData(q, data) {
if (data) {
$input.removeClass(options.loadingClass);
results.innerHTML = "";
// フィールドにフォーカスがなくなった場合、または一致するものが存在しない場合は、ドロップダウンを表示しません。
if (!hasFocus || data.length == 0) return HideResultsNow();
if ($.browser.msie) {
// HTML SELECT 要素が透けて見えないように、カレンダーの後ろにスタイル付き iframe を配置します
$results.append(document.createElement('iframe') );
}
results.appendChild(dataToDom(data));
// ユーザーがさらにデータを入力していない限り、最初に一致したボックスに完全に自動入力します
if (options.autoFill && ($input.val().toLowerCase() == q .toLowerCase())) autoFill(data[0][0]);
showResults();
} else {
hideResultsNow();
}
};
function parseData(data) {
if (!data) return null;
var parsed = [];
var rows = data.split(options.lineSeparator);
for (var i = 0; i var row = $.trim(rows[i]);
if (row) {
parsed[parsed.length] = row.split(options.cellSeparator);
}
}
解析されて戻ります。
};
function dataToDom(data) {
var ul = document.createElement("ul");
var num = data.length;
// 結果を最大数に制限します
if ((options.maxItemsToShow > 0) && (options.maxItemsToShow for (var i = 0; i
if (!row) 継続;
var li = document.createElement("li");
if (options.formatItem) {
li.innerHTML = options.formatItem(row, i, num);
li.selectValue = row[0];
} else {
li.innerHTML = row[0];
li.selectValue = row[0];
}
var extra = null;
if (row.length > 1) {
extra = [];
for (var j = 1; j extra[extra.length] = row[j];
}
}
li.extra = 追加;
ul.appendChild(li);
$(li).hover(
function() { $("li", ul).removeClass("ac_over"); $(this).addClass("ac_over"); active = $(" li", ul).indexOf($(this).get(0)); },
function() { $(this).removeClass("ac_over"); }
).click(function( e) { e.preventDefault() e.stopPropagation() });
}
ul を返します。
};
function requestData(q) {
if (!options.matchCase) q = q.toLowerCase();
var data = options.cacheLength ?ロードフロムキャッシュ(q) : null;
// キャッシュされたデータを受信します
if (data) {
receiveData(q, data);
// AJAX URL が指定されている場合は、今すぐデータのロードを試みます
} else if ((typeof options.url == "string") && (options.url.length > 0)) {
$.get(makeUrl(q), function(data) {
data = parseData(data);
addToCache(q, data);
receiveData(q, data);
} );
// データが見つからなかった場合は、読み込みクラスを削除します
} else {
$input.removeClass(options.loadingClass);
}
};
function makeUrl(q) {
var url = options.url "?q="escape(q);
for (var i in options.extraParams) {
url = "&" i "="scape(options.extraParams[i]);
}
URL を返します。
};
functionloadFromCache(q) {
if (!q) return null;
if (cache.data[q]) は、cache.data[q] を返します。
if (options.matchSubset) {
for (var i = q.length - 1; i >= options.minChars; i--) {
var qs = q.substr(0, i );
var c = キャッシュ.データ[qs];
if (c) {
var csub = [];
for (var j = 0; j var x = c[j];
var x0 = x[0];
if (matchSubset(x0, q)) {
csub[csub.length] = x;
}
}
csub を返します。
}
}
}
null を返します。
};
関数 matchSubset(s, sub) {
if (!options.matchCase) s = s.toLowerCase();
var i = s.indexOf(sub);
if (i == -1) は false を返します。
return i == 0 || options.matchContains;
};
this.flushCache = function() {
flushCache();
};
this.setExtraParams = function(p) {
options.extraParams = p;
};
this.findValue = function() {
var q = $input.val();
if (!options.matchCase) q = q.toLowerCase();
var data = options.cacheLength ?ロードフロムキャッシュ(q) : null;
if (data) {
findValueCallback(q, data);
} else if ((typeof options.url == "string") && (options.url.length > 0)) {
$.get(makeUrl(q), function(data) {
data = parseData(data)
addToCache(q, data)
findValueCallback(q, data);
} else {
// 一致するものはありません
findValueCallback(q, null);
}
}
function findValueCallback(q, data) {
if (data) $input.removeClass(options.loadingClass);
var num = (データ) ?データの長さ: 0;
var li = null;
for (var i = 0; i
if (row[0].toLowerCase() == q.toLowerCase()) {
li = document.createElement("li");
if (options.formatItem) {
li.innerHTML = options.formatItem(row, i, num);
li.selectValue = row[0];
} else {
li.innerHTML = row[0];
li.selectValue = row[0];
}
var extra = null;
if (row.length > 1) {
extra = [];
for (var j = 1; j extra[extra.length] = row[j];
}
}
li.extra = 追加;
}
}
if (options.onFindValue) setTimeout(function() { options.onFindValue(li) }, 1);
}
function addToCache(q, data) {
if (!data || !q || !options.cacheLength) return;
if (!cache.length || キャッシュ.length > options.cacheLength) {
flushCache();
キャッシュの長さ;
} else if (!cache[q]) {
cache.length ;
}
cache.data[q] = データ;
};
function findPos(obj) {
var curleft = obj.offsetLeft || 0;
var curtop = obj.offsetTop || 0;
while (obj = obj.offsetParent) {
curleft = obj.offsetLeft
curtop = obj.offsetTop
}
return { x: curleft, y: curtop };
}
}
jQuery.fn.autocomplete = function(url, options, data) {
// オプションが存在することを確認します
options = options || {};
// URL をオプションとして設定します
options.url = url;
// バルクローカルデータを設定します
options.data = ((typeof data == "object") && (data.constructor == Array)) ?データ: null;
// 必要なオプションのデフォルト値を設定します
options.inputClass = options.inputClass || "ac_input";
options.resultsClass = options.resultsClass || "ac_results";
options.lineSeparator = options.lineSeparator || 「ん」;
options.cellSeparator = options.cellSeparator || "|";
options.minChars = options.minChars || 1;
オプション.遅延 = オプション.遅延 || 400;
options.matchCase = options.matchCase || 0;
options.matchSubset = options.matchSubset || 1;
options.matchContains = options.matchContains || 0;
options.cacheLength = options.cacheLength || 1;
options.mustMatch = options.mustMatch || 0;
options.extraParams = options.extraParams || {};
options.loadingClass = options.loadingClass || "ac_loading";
options.selectFirst = options.selectFirst ||間違い;
options.selectOnly = options.selectOnly ||間違い;
options.maxItemsToShow = options.maxItemsToShow || -1;
options.autoFill = options.autoFill ||間違い;
options.width = parseInt(options.width, 10) || 0;
this.each(function() {
var input = this;
new jQuery.autocomplete(input, options);
});
// チェーンを壊さないでください。
これを返します。
}
jQuery.fn.autocompleteArray = function(data, options) {
return this.autocomplete(null, options, data);
}
jQuery.fn.indexOf = function(e) {
for (var i = 0; i
}
-1 を返す;
};

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ホットトピック









