2010-05-07 113 views
9

我試圖選擇頁面中的所有<script type="text/html">標記。我使用<script>標籤來存儲HTML模板,類似於how John Resig does it。出於某種原因,下面的jQuery選擇似乎並沒有被任何選擇:jQuery選擇器腳本標記問題

$("script[type*=html]").each(function() { 
    alert("Found script "+this.id); 
}); 

這個標記是在HTML文檔的BODY:

<body> 
    <script id="filter-search" type="text/html"> 
     <dt>Search</dt> 
     <dd><input type="text"/></dd> 
    </script> 
</body> 

我也試圖把它變成HTML文檔的HEAD,但仍未找到。沒有警報顯示。

如果我不是更改我的代碼這樣:

$("script[type*=javascript]").each(function() { 
    alert("Found script "+this.id); 
}); 

然後,它在具有src到外部文件的HEAD發現只有腳本。沒有找到實際頁面中的腳本。例如,在HEAD以下幾點:

<head> 
    <script type="text/javascript" src="jquery.js" id="jquery"></script> 
    <script type="text/javascript" src="jquery-ui.js" id="ui"></script> 
    <script type="text/javascript" id="custom"> 
     $(document).ready(function() { 
      $("script[type*=javascript]").each(function() { 
       alert("Found script "+this.id); 
      });   
      $("script[type*=html]").each(function() { 
       alert("Found TEMPLATE script "+this.id); 
      });   
     }); 
    </script> 
    <script id="filter-test" type="text/html"> 
     <dt>Test</dt> 
    </script> 
</head> 
<body> 
    <script id="filter-search" type="text/html"> 
     <dt>Search</dt> 
     <dd><input type="text"/></dd> 
    </script> 
</body> 

我得到以下警報:

  • 找到腳本的jQuery
  • 找到腳本UI

中的customfilter-test腳本HEAD未被選中,body標籤中的filter-search腳本也不被選中。

這是預期的行爲?爲什麼這不起作用?我可以解決它,但令人討厭的是它不起作用。

編輯:事實證明,這實際上使用上面的例子工作正常。在我的情況下,jQuery代碼是在一個外部的Javascript模塊,它絕對不能工作。當我將代碼移動到頁面本身的腳本標記中時,它就起作用了。我仍然沒有弄清楚爲什麼它不能在外部文件中工作,但是如果我在某個時候解決它,將會在這裏報告。

+0

如果我在chrome上用jQuery 1.4.2運行你的腳本,所有需要的ID都會提醒 – jAndy 2010-05-07 09:48:13

+0

@tauren我最近有類似的問題。請你可以嘗試一個實驗:改變文本/ HTML到其他東西(建議文本/模板),看看這是否適用於你的外部腳本... – UpTheCreek 2012-03-21 18:17:17

回答

2

你使用什麼瀏覽器?這個腳本工作正常,我在Chrome,Firefox和IE6,給我的提醒:

  • 找到腳本的jQuery
  • 找到腳本UI
  • 找到腳本定製
  • 找到模板腳本過濾器測試
  • 找到模板腳本過濾搜索
+0

我已經得到它的工作太當我把代碼正確的jQuery隨時關閉HTML本身。我正在測試從正在導入的外部JavaScript模塊中運行的代碼,而不是我的問題中的腳本。仍然不明白爲什麼它從外部腳本模塊運行時不起作用。我需要更多的時間來看看。但至少它從本地腳本開始工作。感謝您的測試! – Tauren 2010-05-07 10:57:24

1

您使用外部腳本中遇到的問題可能是由於加載順序。爲了最大限度地提高響應速度,瀏覽器在頁面被完全下載並解析之前,開始加載並執行在頁面中遇到的腳本。因此,如果您在head元素中鏈接了腳本,則可能無法訪問頁面下方指定的DOM部分,如自定義腳本標記。

兩個可能的解決方案:

  • 重新整理腳本標記,以便自定義標籤使用它們的腳本之前。
  • 用一些等待DOM加載的東西包裝你的腳本(如jQuery $() shortcut)。