以前就應(yīng)該知道的:
如果在 html 中寫不知名的標(biāo)簽, html 是會(huì)忽略掉這個(gè)標(biāo)簽的!!
比如你建一個(gè) html 標(biāo)簽,然后有以下內(nèi)容:
一個(gè)解釋就是,jsp 是在服務(wù)器端就進(jìn)行編譯解釋,編譯解釋為響應(yīng)的 html 和 class ,然后將 html 發(fā)送到客戶端。
問題就出來了,如果我利用 js 在客戶端進(jìn)行 innerHTML ,其中 inner 的內(nèi)容含有 jsp 標(biāo)簽,那么頁面會(huì)如何處理?按照上面的解釋執(zhí)行,我們應(yīng)該得不到我們進(jìn)行標(biāo)簽處理的結(jié)果。
測(cè)試內(nèi)容如下:
<script type="text/javascript">
window.onload = function(){
document.getElementById('div_test').innerHTML = '<c:out value="中國,強(qiáng)大" />';
}
</script>
<div id="div_test">
Hello world
</div>
<c:out value="你好,世界" />
你猜, div_test 的內(nèi)容是什么?
對(duì)了,是 "中國,強(qiáng)大" - 》 為什么是這個(gè)字符串,jstl 的標(biāo)簽不是在服務(wù)器端處理的嗎?
恩。因?yàn)閺姆?wù)器發(fā)過來 html 的時(shí)候,已經(jīng)將 js 的jstl標(biāo)簽部分轉(zhuǎn)為了字串了,所以瀏覽器解釋執(zhí)行的時(shí)候就當(dāng)做普通的字符串處理。
那么,利用 js(js 文件單獨(dú)的通過 <script src /> 導(dǎo)入) 來進(jìn)行 innerHTML 的 jstl 標(biāo)簽?zāi)兀繒?huì)怎樣顯示?
因?yàn)檫@樣的話,js 不會(huì)被服務(wù)器解釋。
<script src="../js/test.js"></script>
<body>
<div id="div_test">
Hello world
</div>
<c:out value="你好,世界" />
</body>
而 test.js 的內(nèi)容為:
window.onload = function(){
document.getElementById('div_test').innerHTML = '<c:out value="不知不覺" />';
}
結(jié)果是,層 div_test 的內(nèi)容變?yōu)榱丝?....
因?yàn)闉g覽器將不知名的標(biāo)簽以及其屬性不進(jìn)行任何的解釋!,如果標(biāo)簽有內(nèi)容,就僅僅顯示標(biāo)簽的內(nèi)容。
比如: <abcd value="哈哈" ></abcd> 就會(huì)顯示為空。而 <abcd>哈哈</abcd> 就僅僅顯示標(biāo)簽之間的內(nèi)容 “哈哈”。
又由于 js 沒有經(jīng)過瀏覽器解析,直接將 jstl 標(biāo)簽 inner 到了 html 中,所以這個(gè)標(biāo)簽就還是方知道了層之間,瀏覽器解析時(shí)不識(shí)別,所以就掛掉了。
一個(gè)相關(guān)的問題就是: 如果我從服務(wù)器直接獲取數(shù)據(jù)(利用 Ajax),然后用 js 進(jìn)行數(shù)據(jù)處理,我們?nèi)绻?js 中利用 innerHTML = "jstl 標(biāo)簽 處理我們的數(shù)據(jù)" 的話,就掛掉了。。
如果利用 ajax 獲取數(shù)據(jù),數(shù)據(jù)的格式化,要么在服務(wù)器端格式化好,要么定義專門的 js 來格式化。
具體情況,具體分析......
一個(gè)附帶的問題。
如果我引入的js 文件( <script src="test.js" /> ) 與我的頁面的 js 文件定義的方法或者事件有沖突,是如何執(zhí)行的?
比如:都定義有 window.onload 事件.,誰會(huì)被采納??
我還以為都會(huì)執(zhí)行呢,只是后面的方法會(huì)覆蓋前面的方法中相同的處理。
但是不是的。
他只選擇處理在后面定義的一個(gè)。!
也就是說,如果 <script src= '' /> 放在我頁面定義的方法的后面,它就執(zhí)行 <script src='' />中的方法。
歸結(jié)為一點(diǎn): 后面的覆蓋到了前面的。