如何找到具有“type”属性特定值的元素?

假设随机HTML文档中包含以下脚本标记:

 //random JavaScript code function foo(){ alert("foo"); } foo();  

任何人都可以解释为什么下面的表达式没有为其type属性找到带有值storescript所有元素。

 var sel = $('#target script[type="store"]'); 

jQuery版本:v1.7.2 Chrome版本:25.0.1364.172(在Debian Squeeze上运行)

您的selector $('#target script[type="store"]')将匹配任何脚本标记与类型store ,该类型store是具有id target的元素的子元素。 对于您的示例HTML,情况并非如此。

如果要选择类型为store所有脚本标记,则选择器应如下所示: $('script[type="store"]')

如果您只想选择具有id target的特定脚本标记,则只能使用$('#target') 。 不需要更具体,因为ID应该是该元素唯一的。 仅使用ID选择器也会更有效,因为jQuery然后可以利用本机document.getElementById()来选择你的元素(可能是微优化,但仍然……)

因为你所写的意思是:找到属性type等于store每个script元素,并且是#target后代 (因为空间)。

你可以这样做:

 var sel = $('script#target[type="store"]'); 

但这是不必要的,因为ID已经识别了一个元素 – 文档中的任何元素都不能共享相同的ID

如果我理解你的描述,你需要的是:

 var sel = $('script[type="store"]'); 

还有一件事:你不应该使用type属性。 它有一个非常特殊的目的 :

type属性提供脚本的语言或数据的格式。 如果该属性存在,则其值必须是有效的MIME类型。 不得指定charset参数。 如果属性不存在,则使用默认值“text / javascript”。

所以我建议你使用data-type而不是type

你需要这个 –

 var sel = $('#target[type="store"]'); 

你需要做的

 var sel = $('script#target[type="store"]'); 

在此选择器中,您正在寻找脚本标记内的type =“store”的脚本标记。 你应该试试:

 $('script#target[type="store"]'); 

用这个

 var sel = $('script#target[type="store"]'); 

可能的最短解释:

您正在尝试定位#target的子脚本。

例如,如果您的标记受到……的影响

 

…你的jQuery选择会起作用。

要选择具有特定值的所有脚本元素,请执行以下操作:

 $('script[type="value"]') 

要选择具有ID的特定脚本,请执行以下操作:

 $('script#id[type="value"]') 

还可以将没有标识符的脚本作为目标:

   

你在运行这段代码时会意识到的是,第一个脚本将自己定位,并输出到控制台,以及使用// The event will target me :(文档中的最终脚本// The event will target me :(评论。

原因是在事件之外,要添加到DOM的最后一个元素是执行指令的脚本标记,这在逻辑上意味着它是$('script')的最后一个脚本标记。

但是,在事件内部,在本例中是document.on('ready') ,等待DOM完成加载,以便加载文档中可能存在的任何其他脚本标记,并替换所需的.last()目标。