[小Tip]給元素命名時容易踩的坑
提醒:本文最後更新於 2105 天前,文中所描述的資訊可能已發生改變,請謹慎使用。
之前說過,給元素的id或者class取一個看上去就是廣告的名字,很容易被adblock幹掉(當然如果你的網站足夠有名,怎麼取名都沒用,不出三天,立馬就有針對你的專屬規則)。所以在寫html屬性值的時候,我們除了要遵守html編碼規範,還要看下adblock常用的ChinaList+EasyList過濾列表中的預設規則,不要被匹配到。還要避免踩到陳舊瀏覽器帶來的坑。
上週某同學踩到的坑是:給form裡某個input的name屬性寫了一個名為name的屬性值。
<form action="url" method ="get" name="form1">
<input name="name" />
</form>
<script>
var form = document.getElementsByTagName('form')[0];
alert('form.name:' + form.name);
alert('form.getAttribute("name"):' + form.getAttribute('name'));
</script>
在IE6、7下,上面最後兩行程式碼都會取到object,也就是那個input,不會得到form元素的name屬性值。其它瀏覽器,form.name得到的是input元素,form.getAttribute('name')得到的是字串"form1"。
QWrap有個ajaxForm方法,接受form引數,程式碼內部獲取form的所有資料項以及action和method屬性值進行提交。程式碼使用的是form.action、form.method,如果form裡剛好有name等於這兩個值的表單元素,就會出錯。這裡如果改成getAttribute,至少能保證IE6、7之外的瀏覽器得到正常的結果;對於IE6、7,可以通過getAttributeNode來獲取到正確的值。但是由於很多人都習慣用form.xxx來獲取表單的屬性,給表單元素的name屬性值命名還是要儘可能的避開常見的form屬性名,如name|method|action等。
另外的坑是IE6給元素指定了id="xx",可以通過window.xx得到這個元素。這在某些場景下會帶來問題,例如QWrap所有方法都是定義在QW名稱空間下,為了使用方便在最後的retouch檔案中,通過mix(window, QW),把方法提到window下。但是這個mix預設不override,如果頁面在引用QWrap之前寫了一個<div id="W"></div>,QWrap的W就壞掉了。更鬱悶的是IE6對name和id的混亂實現,對於支援name屬性的a|input等元素,name可以當id來用,寫一個<input name="W" />也會在window下定義一個W變數。後來QWrap改成了window.W = QW.W來避免這個問題。
有時候,我們寫程式碼會使用typeof XX !== 'undefined'或者!!window.XX來判斷一個頁面是否引用了某JS。由於這個bug的存在,IE6中這段程式碼出現在id|name="XX"的元素之後會得到錯誤的結果。這種情況,一方面js中需要做更多的檢查;另一方面,給html元素的id和name命名時也要格外小心。
--EOF--
提醒:本文最後更新於 2105 天前,文中所描述的資訊可能已發生改變,請謹慎使用。
相關推薦
[小Tip]給元素命名時容易踩的坑
提醒:本文最後更新於 2105 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 之前說過,給元素的id或者class取一個看上去就是廣告的名字,很容易被adblock幹掉(當然如果你的網站足夠有名,怎麼取名都沒用,不出三天,立馬就有針對你的專屬規則)。所以在寫html屬性值的時候,我們除了要遵守
通過css選擇器class給元素添加cursor的坑
tex height ssh 等於 light help 通過 first foo 筆者在chrome中遇到了奇特的問題,在通過class給元素添加cursor的自定義圖片時。出現了"Invald property value"提示,crosshair、help等屬性值可以
[小Tip]Webkit下設定hash的一個坑
提醒:本文最後更新於 2366 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 今天要說的hash,就是瀏覽器位址列URL裡#之後的那堆東東,一般用來定位到頁面中的命名錨點,或者用來維護純客戶端的頁面跳轉歷史狀態。這是幾年前的話題了,大家肯定都知道,我的部落格也寫過相關文章。 hash的最大好處
關於一些容易踩坑的Java面試題
1、是否可以從一個static方法內部呼叫非static方法的操作? 不可以。因為非static方法是和物件關聯在一起的,必須建立一個物件才能進行呼叫,而static方法呼叫時不需要建立物件,可以直接通過類名呼叫。static物件做為類成員,但是和類無關,呼叫
微信小程序性能測試之jmeter踩坑秘籍(前言)
建模 模型 包括 準備 基礎功 round 結果 信息 一定的 最近要做個微信小程序的性能壓測,雖然之前只做過web端的,但想一想都是壓後端的接口,所以果斷答應了下來,之前對jmeter都是小打小鬧,所以趁著這次機會好好擺弄擺弄。 ---------------------
小tip: margin:auto實現絕對定位元素的水平垂直居中
實現 可用 偏移 css代碼 百度 add 包含塊 統計 ica 轉載自:http://www.zhangxinxu.com/wordpress/?p=3794 一、絕對定位元素的居中實現 如果要問如何CSS實現絕對定位元素的居中效果,很多人心裏已經有答案了。 兼容性不
初學C語言編程時最容易犯的錯誤,你踩坑了嗎?
不同的 類型 alt 結果 如何 wid text size can C編譯的程序對語法檢查並不像其它高級語言那麽嚴格,這就給編程人員留下“靈活的余地”,但還是由於這個靈活給程序的調試帶來了許多不便,尤其對初學C語言的人來說,經常會出一些連自己都不知道錯在哪裏的錯誤。看著有
寫給前端新人:入門前端時容易出錯的知識點
Web前端開發作為如今網際網路企業不可缺少的崗位,因為簡單易學成為很多人入門程式設計的首選。可是對於初學者來說,因為缺乏經驗,難免在學習的過程中會遇到一些坑,犯一些錯誤,為了幫助大家在入門前端的過程中少走彎路,列舉了初學者在入門前端時容易出錯的知識點。 一、JQuery 選擇器
微信小程式下拉重新整理時頂部tab元素不隨著下拉移動
頂部tab元素用fixed固定,設定了top屬性。發下在微信小程式中使用onPullDownRefresh()時,頂部tab元素不隨著下拉操作移動。所以將tab元素的top屬性取消,這樣就可以實行頂部t
開發小程式時容易出現的問題
1.在微信小程式工具點選預覽的時候出現以下問題意思很明顯是小程式的程式碼總大小不能超過2M2.微信小程式開發時,如果有函式被呼叫多次,也就是我們開發中俗稱的公共函式,那麼這個時候應該將該函式寫在app.js檔案中,當然了,並不只是寫進去就可以呼叫了,還要在需要呼叫函式的檔案中
給元素繫結click事件時造成事件累加
在專案中,遇到了這樣的問題:用li標籤展示每個地區,然後給li增加click事件,當點選時,使用toggleClass()方法增加一個active的樣式。 li存在一個div中,每次更換省份會使用ajax請求替換div中的內容,有的li標籤點選後並沒有出現選中的狀態。剛開始
使用Linq擴充套件方法時容易忽略的小問題
問題重現 下面直接給出用於說明文章主題的完整程式碼。 //************************************************************ // // Linq擴充套件方法示例程式碼 // // Au
python小練習1:設計這樣一個函數,在桌面的文件夾上創建10個文本,以數字給它們命名。
一個 數字 width lose 文件夾 .com 小練習 pen wid python小練習1:設計這樣一個函數,在桌面的文件夾上創建10個文本,以數字給它們命名。 使用for循環即可實現: for name in range(1,11): desk
【css筆記(2)】如何給元素應用規則?
mpi phy yellow ini log min lib second from css選擇器 在介紹之前我麽你先來看看css大致分為幾種選擇器: 1.類型選擇器(元素選擇器) 2.後代選擇器(元素的所有後代) 3.偽類(:active, :hover, :fo
Angular2-無法給元素的屬性做雙向綁定,除非這個屬性是指令或者組件
lec input bsp 操作 data hang 前綴 綁定 對象 呈現一個實體對象的DOM結構,這個DOM有個自定義屬性是需要動態賦值的,比如說 item.data 要綁到自定義屬性 data 上;你可能會這麽寫: data="{{item.data}}" ,但直
vmware下安裝mac os虛擬機問題,最後還是最終攻克了被一個小失誤給陷害了
網上 vmw pan ont 分鐘 進度 .net center 系統 今天決定來體驗一下蘋果系統。虛擬機文件大概用了一天半時間才下載完畢,解壓後是39G大小,趕緊安裝VMWARE。然後載入虛擬機文件體驗。開始當我蘋果標誌出來的時候,我以為成功了。但是那個小齒輪一直在轉
python_如何為元組中每個元素命名
進行 port 數據 大量 程序 問題 什麽 log python 學生信息系統: (名字,年齡,性別,郵箱地址) 為了減少存儲開支,每個學生的信息都以一個元組形式存放 如: (‘tom‘, 18,‘male‘,[em
scala中計算的的一個小問題,超出Int.maxValue時不會報錯
class sca cal div 問題 pri 如果 int sin 如果小於Int.max時他不會報錯 def sumcount(str:String): Int ={ val ints = for(c <- str)yield { p
微信小程序踩坑集
log icon spa utils for not duration 是我 問題 setData function is not defined 這個問題只會出現在 wx.request(OBJECT)中 具體替代嗎吧!寫日誌真的不是我的強項 //logs
Angular2 直接給元素指定超鏈接打開會帶有 `unsafe` 字樣導致數據不能加載
超鏈接 from ani sss struct class keyword 鏈接地址 導致 解決方法: 在 component 中引入 import { DomSanitizer } from "@angular/platform-browser";然後在構造函數中註入 c