根据jQuery's API StartsWith
选择器旨在用于整个文档。
例如,
var $elements = $( "span[id^='MJXc']" );
会在DOM中找到ID为&#39; MJXc&#39;的所有<span>
。
但是如果我有一个存储在变量中的元素数组并且我只想选择那些以...开头的那些元素呢?我还可以使用StartsWith
选择器吗?
以下似乎不起作用并发出Uncaught SyntaxError: Unexpected token (
var $elements = $arrayofelements.( "span[id^='MJXc']" );
我没有添加或删除任何括号,我只是将一个变量放在选择器前面。
$arrayofelements
在控制台中看起来像这样:
0:span#MJXc-Node-7.mjx-mrow
1:span#MJXc-Node-28.mjx-mi
2:span.mjx-base
3:span#MJXc-Node-34.mjx-mi
理想情况下,我希望将元素0,1和3重新设置,跳过元素2,因为它没有以&#39; MJXc&#39;开头的ID。
答案 0 :(得分:2)
在JQuery中使用.filter()
方法。
$arrayOfElements.filter('span[id^=MJXc]');
与大多数JQuery方法一样,它需要一个选择器。它返回一个新的JQuery对象,该对象仅包含与选择器匹配的元素(在本例中,是一个ID为MJXc
的范围)。
// get only the spans inside #parent div
$spansToFilter = $('#parent').children();
$filteredSpans = $spansToFilter.filter('[id^=MJXc]');
// prove we've filtered out the span with no matching ID
$filteredSpans.each(function(i, item) {
console.log(item);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span id="MJXc-Node-7.mjx-mrow">(external skip)</span>
<div id="parent">
<span id="MJXc-Node-7.mjx-mrow">A</span>
<span id="MJXc-Node-28.mjx-mi">B</span>
<span class=".mjx-base">(skip C)</span>
<span id="MJXc-Node-34.mjx-mi">D</span>
</div>
&#13;
您尝试的内容无效,因为Javascript whatever.()
无效;你试图调用一个没有名字的函数。在JQuery和javascript中,您始终在链obj.method()
中的前一个对象上调用方法。这些方法返回了具有相同方法集的新JQuery对象,这使得链接成为可能。 JQuery对象拥有的所有方法都列在JQuery documentation中,包括.filter()
,.find()
,.children()
等。
答案 1 :(得分:1)
javascript具体答案:
从您的$elements
数组,您只需检查您的元素startsWith()
的ID是否为特定前缀。它确实如此,你可以简单地将它推入新阵列。
var $selectedElements = [];
for(var i=0; i<$elements.length; i++)
if($elements[i].id.startsWith("MJXc"))
$selectedElements.push($elements[i]);