如何找到具有“type”属性特定值的元素?
假设随机HTML文档中包含以下脚本标记:
//random JavaScript code function foo(){ alert("foo"); } foo();
任何人都可以解释为什么下面的表达式没有为其type
属性找到带有值store
的script
所有元素。
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()
目标。