placeholder屬性定義: placeholder 屬性規定可描述輸入字段預期值的簡短的提示信息(好比:一個樣本值或者預期格式的短描述)。html
問題來源: placeholder屬性給予了用戶很友好的提示,可是在老版本的瀏覽器中就不會起做用(Internet Explorer 9 及以前的版本不支持 placeholder 屬性),這是一個很頭疼的問題,因而就產生了如下的思考。node
'placeholder' in document.createElement('input')
document.querySelectorAll('[placeholder]')
Array.prototype.slice.call(document.querySelectorAll('[placeholder]'))
nodes.forEach()
var cloneNode = item.cloneNode()
if (cloneNode.getAttribute('type').toLowerCase() === 'password') { cloneNode.setAttribute('type', 'text') }
cloneNode.setAttribute('value', cloneNode.getAttribute('placeholder')) cloneNode.style.display = 'none'
item.insertAdjacentHTML('afterend', cloneNode.outerHTML)
item.nextSibling.addEventListener('focus', function () { this.style.display = 'none' this.previousSibling.style.display = 'inline' this.previousSibling.focus() })
item.addEventListener('focus', function () { this.nextSibling.style.display = 'none' })
item.addEventListener('blur', function () { if (!this.value) { this.style.display = 'none' this.nextSibling.style.display = 'inline' } })
if (!item.value) { item.style.display = 'none' item.nextSibling.style.display = 'inline' }
if (!('placeholder' in document.createElement('input'))) { // 將返回的nodeList對象轉爲數組 var nodes = Array.prototype.slice.call(document.querySelectorAll('[placeholder]')) nodes.forEach(function (item, index) { item.addEventListener('focus', function () { this.nextSibling.style.display = 'none' }) item.addEventListener('blur', function () { if (!this.value) { this.style.display = 'none' this.nextSibling.style.display = 'inline' } }) var cloneNode = item.cloneNode() // 若是[type='password']類型,則轉爲text if (cloneNode.getAttribute('type').toLowerCase() === 'password') { cloneNode.setAttribute('type', 'text') } cloneNode.setAttribute('value', cloneNode.getAttribute('placeholder')) cloneNode.style.display = 'none' item.insertAdjacentHTML('afterend', cloneNode.outerHTML) item.nextSibling.addEventListener('focus', function () { this.style.display = 'none' this.previousSibling.style.display = 'inline' this.previousSibling.focus() }) if (!item.value) { item.style.display = 'none' item.nextSibling.style.display = 'inline' } }) }
因爲本人學識有限,有不少須要提高的地方,望你們多多指教。數組