我在原型/scriptaculous 和 jQuery 的混合環境中作業。不是我的實作,但現在是我的問題:我正在努力在任何地方洗掉原型/腳本,并在時間允許的情況下用 vanillaJS 替換它們。
同時,假設我有一個 DOM 元素,jQuery 會這樣:
$("#myElement")
是否可以從中獲取 jQuery 物件,因此我不必將“$”從函式傳遞到函式作為額外引數?例如:
function foo($) {
const myElement = $("#myElement");
...do some stuff to myElement here...
bar(myElement);
}
function bar(myElementIn) {
const $ = {somehow get the jQuery object from myElementIn};
...do more stuff with other elements related to myElementIn...
}
遠射,我敢肯定,但認為這值得一問。
uj5u.com熱心網友回復:
您可以使用Object.getPrototypeOf獲取 jQuery 的原型,.constructor然后獲取 jQuery。
const myElementIn = $(/* ... */);
console.log(Object.getPrototypeOf(myElementIn).constructor === $);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP u1T9qYdvdihz0PPSiiqn/ /3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
uj5u.com熱心網友回復:
要獲取 DOM 元素,您可以使用 jQuery.get()方法https://api.jquery.com/get/
例如使用您的 ID 選擇器:const myElement = $("#myElement").get()
如果你只想要一組中的第一個const myElement = $(".my-class").get(0);
您也可以通過創建快取物件來按照您的說明進行操作。例子:
const myElement = $("#myElement");
myElement.html("<div>new html</div>");
myElement.append("<button>New Button text</button>");
myelement.find('span').trigger('click');
doMoreFunction(myElement);
function doMoreFunction(jqEl){
jqEl.find('button').text("Updated Button Text");
}
下面是另一個例子: 設定:你有一個包含一個<iframe>(都在同一個域上)的檔案,并且你想在父視窗上呼叫 jQuery(這里假設我們的演示它是 TOP 視窗,以防你有嵌套的 iframe)
好的,現在我們已經有了一些“基礎”,下面是一個在傳遞 jQuery 物件的函式中實際獲取對 jQuery 的參考的示例(有點 hacky)。
var mybody = jQuery('body')
.append('<div id="my-new-thing">I append to the top window DOM</div>');
//This assumes the top window has jQuery referenced in it via a script element for example
const newThing = jQuery('#my-new-thing');
newThing.append('<span>New Span For our element</span>');
// console.log(newThing);// commented out as too long for here :)
console.log(newThing.constructor);
console.log(newThing.constructor == jQuery); // logs true
function testMe(me) {
console.log(me.constructor == jQuery);
let jq = me.constructor;
jq(me.get(0)).append("<span> More New</span>");
}
testMe(newThing);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/437464.html
標籤:javascript jQuery
