2013-06-16 3 views
1

Я пытаюсь получить текстовые значения некоторых элементов a с помощью селекторов jquery, но у меня, похоже, возникают проблемы. Если я использую .val(), я ничего не получаю, и если я использую .text(), у них есть дополнительный возврат и пробел.Получить текстовое значение элемента `a`

Вот элемент, текст значения мне нужно:

<a class="btn dropdown-toggle langLocaleNameSelector" 
        data-toggle="dropdown">en_US<span class="caret"></span> 
       </a> 

Во-первых, я пытаюсь написать селектор, который выбирает только те элементы, где InnerText не равно «LangLocale».

Я пытался сделать это таким образом:

var selectors = $('a.langLocaleNameSelector[innerText!="LangLocale"]'); 

Но это, кажется, тянуть все из них так или иначе.

Тогда, если я пытаюсь вызвать .text() от этих селекторов, я получаю что-то вроде:

"en_US [return]   en_CA [return]   " 

Когда то, что я действительно хочу это массив их innerTexts, что-то вроде этого:

['en_US', 'en_CA'] 

Может ли кто-нибудь сказать мне, как написать правильный селектор, чтобы получить только те, которые я хочу, и B. как получить только внутренний текст из этого элемента, как только я его получу?

+0

Что именно LangLocale? У вашего элемента нет этого атрибута. – arknave

+0

Может быть, раскол на [return]? Я предполагаю, что [return] действительно обратный слэш n, но SO отключает его? После разделения вы получите массив. Затем отобразите его для обрезки? –

+0

@arknave Это текст. В моем примере это «en_US». – CorayThan

ответ

4

Вы можете попробовать это -

var elems = $('a.langLocaleNameSelector').filter(function() { 
    return $.trim($(this).text()) !== "LangLocale"; 
}); 

Чтобы получить массив внутренних текстов -

var arr = $('a.langLocaleNameSelector').filter(function() { 
    return $.trim($(this).text()) !== "LangLocale"; 
}).map(function() { 
    return $.trim($(this).text()); 
}).get(); 

Демонстрационные --->http://jsfiddle.net/WCp2b/3/

+2

+1 ... Я бы также добавил, что было бы предпочтительнее, по моему мнению, не использовать innerText в качестве значения, вместо этого я бы использовал атрибут data, например 'data-value', тогда вам не нужно беспокоиться об обрезке, и если вы хотите изменить маркировку, представленную пользователю, вы можете сделать это без изменения какого-либо кода, который в конечном итоге «потребляет» значение локали. – prodigitalson

+0

Я не уверен, почему, но фильтр не возвратил ни одного из них вообще. Я обнаружил, что могу просто получить доступ к свойству 'element.text' и содержать значение, которое я хочу, но без необходимости его обрезать. – CorayThan

+0

@CorayThan я только что обновил демо, попробуйте его '->' http://jsfiddle.net/WCp2b/3/ –

1

возврата каретки и белого пространства справедливо и правильно; это то, что находится в элементе - у вас есть возврат каретки плюс полная загрузка пробела прямо в HTML. Если вы этого не хотите, вам придется обрезать его.

Или вы можете закрыть пространство в конце элемента <a>, так что </a> сразу же после окончания содержимого, чтобы в нем не было пробела.

<a class="btn dropdown-toggle langLocaleNameSelector" 
       data-toggle="dropdown">en_US<span class="caret"></span></a> 

Другой альтернативой было бы поставить соответствующую часть содержания <a> элемента во внутренний элемент, который не имеет никакого пустого пространства.

en_US

..., а затем выбрать этот новый внутренний элемент вместо <a>.

+0

Вы имеете в виду возвращение после того, как класс вызывая возврат, или элемент '' вызывает его? – CorayThan

+0

После '' у вас есть возврат. На следующей строке у вас есть куча пробелов, прежде чем он попадет в ''. Этот возврат и пробел являются частью текстового значения элемента, и это то, что вам дается, когда вы вызываете '.text()'. – Spudley

+0

Ой, да, теперь я вижу это. К сожалению. :) – CorayThan

1

В POJS вы могли бы сделать это

HTML

<a class="btn dropdown-toggle langLocaleNameSelector" data-toggle="dropdown">en_US<span class="caret"></span></a> 

<a class="btn dropdown-toggle langLocaleNameSelector" data-toggle="dropdown">LangLocale<span class="caret"></span></a> 

<a class="btn dropdown-toggle langLocaleNameSelector" data-toggle="dropdown">en_UK<span class="caret"></span></a> 

<a class="btn dropdown-toggle langLocaleNameSelector" data-toggle="dropdown">en_CA<span class="caret"></span></a> 

Javascript

var arrayOfTexts = Array.prototype.reduce.call(document.getElementsByClassName("langLocaleNameSelector"), function (array, langLocaleNameSelector) { 
    var text = langLocaleNameSelector.childNodes[0].nodeValue; 

    if (text !== "LangLocale") { 
     array.push(text); 
    } 

    return array; 
}, []); 

console.log(arrayOfTexts); 

Выход

["en_US", "en_UK", "en_CA"] 

На jsfiddle

Какой синтаксис Jquery может быть

JavaScript

var arrayOfTexts = $(".langLocaleNameSelector").filter(function() { 
    return this.childNodes[0].nodeValue !== "LangLocale"; 
}).map(function() { 
    return this.childNodes[0].nodeValue; 
}).toArray(); 

console.log(arrayOfTexts); 

Выход

["en_US", "en_UK", "en_CA"] 

На jsfiddle

Смежные вопросы