js行內式遇到的一些問題 DOM物件和jq物件轉換的問題
這兩天給後臺頁面做頁面,我的工作比較簡單,只需要寫結構和樣式就行了,寫好之後,後端大哥用ajax重寫頁面載入資料,順便給標籤新增選中事件,做選中後變色的處理,但是卻遇到一個問題,一直選不到觸發事件這個物件。簡單還原始碼如下
<button id='btn' onclick='check()' name='abc' value='123'>類別</button>
<script>
function check() {
console.log($(this).name);
}
</script>
遇到的問題就是,一直取不到這個button物件,列印$(this)得到的結果是【window】,後來發現,要解決要注意3個地方:
1,、函式裡要穿參即function check(obj),注意這裡的形參不能寫this,其他的都可以。
2、在html呼叫的標籤裡呼叫方法時,要穿實參,即 <button onclick='check(this)' name='abc'>類別</button>。
3、如果用jq的$方法,寫法要注意,如果想用$()這樣的jq物件呼叫js的value方法,必須在後面加個get(0),即
$('#btn').get(0).value //123;
$("#btn")得到的是jquery封裝的物件,裡面提供了jquery的一些方法,並不是html原生物件,通過get(0)才能取到jquery物件裡面關聯的html物件,從而操作html物件的屬性和方法。
這裡涉及到DOM物件和jq物件的轉換問題
jQuery物件轉成DOM物件: 兩種轉換方式將一個jQuery物件轉換成DOM物件:[index]和.get(index); (1)jQuery物件是一個數據物件,可以通過[index]的方法,來得到相應的DOM物件。 如:var $v =$("#v") ; //jQuery物件 var v=$v[0]; //DOM物件 alert(v.checked) //檢測這個checkbox是否被選中 (2)jQuery本身提供,通過.get(index)方法,得到相應的DOM物件 如:var $v=$("#v"); //jQuery物件 var v=$v.get(0); //DOM物件 alert(v.checked) //檢測這個checkbox是否被選中
DOM物件轉成jQuery物件: 對於已經是一個DOM物件,只需要用$()把DOM物件包裝起來,就可以獲得一個jQuery物件了。$(DOM物件) 如:var v=document.getElementById("v"); //DOM物件 var $v=$(v); //jQuery物件 轉換後,就可以任意使用jQuery的方法了。
可能表述的並不完全準確,如果有錯歡迎指正,因為現在寫程式碼很少用行內式,所以這個問題還是蠻有趣的,這裡指提供解決方法,原理有待我進一步學習,哪些能做形參哪些能做實參,還需要深入瞭解。