2010-05-07 77 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)。