2016-08-15 4 views
1

В соответствии с jQuery's APIStartsWith селектор предназначен для использования на весь документ.Как использовать StartsWith селектор переменной?

Например,

var $elements = $("span[id^='MJXc']"); 

найти все <span> с в DOM, которые имеют идентификаторы, начинающиеся с 'MJXc'.

Но что, если у меня есть массив элементов, хранящихся в переменной, и я хочу выбрать только те элементы, которые начинаются с ... из этого массива? Могу ли я использовать селектор 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 reuturned, пропуская элемент 2, поскольку он не имеет ID, начиная с 'MJXc'.

+0

A '()' может быть вызван только для функции. Узнать больше о [функциях] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions) в JavaScript сделает jQuery более понятным. – 4castle

ответ

2

Используйте метод .filter() в JQuery.

$arrayOfElements.filter('span[id^=MJXc]'); 

Как и большинство методов JQuery, требуется селектор. Он возвращает новый объект JQuery, содержащий только те элементы, которые соответствуют селектору (в данном случае, span с идентификатором, начинающимся с 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); 
 
});
<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>

Что вы пробовали не работает, потому что в Javascript whatever.() будет недействительным; Вы пытаетесь вызвать функцию без имени. В JQuery и javascript вы всегда вызываете методы на предыдущем объекте в цепочке obj.method(). Эти методы возвращают новые объекты JQuery, которые имеют один и тот же набор методов, что позволяет связывать цепочку. Все объекты, методы JQuery были перечислены в JQuery documentation, в том числе .filter(), .find(), .children() и т.д.

1

яваскрипта конкретного ответа:

из вашего $elements массива, вы можете просто проверить, является ли идентификатор вашего элемента startsWith() в конкретный префикс или нет. Это он делает, тогда вы можете просто вставить его в новый массив.

var $selectedElements = []; 

for(var i=0; i<$elements.length; i++) 
    if($elements[i].id.startsWith("MJXc")) 
     $selectedElements.push($elements[i]); 
Смежные вопросы