将元素从jQuery .contents()对象转换为字符串或数组

时间:2017-01-27 17:31:17

标签: javascript jquery type-conversion

我试图用段落中的最后一段文字做一些事情,需要将它转换成数组。我知道我可以使用the .contents() method抓住最后一位,然后隔离该对象中的最后一个元素。

但是当我尝试从最后一位创建一个数组时,唯一保留的就是长度!演示:

<p class="orig"><strong>Some bold text</strong> and some other text</p>
<script>
    var bits = $('.orig').contents(); // [strong, text]
    var lastBit = bits[bits.length - 1]; // " and some other text"
    var array = Array.from(lastBit); // [undefined, undefined, . . . undefined]
</script>

我在这里缺少什么?有没有办法在javascript变量或jQuery对象中捕获最后一段文本?谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

您的代码中存在几个问题。

1。 Array.from方法需要类似数组或可迭代对象。但在你的情况下,它是字符串(可迭代),它会将字符串分解为单个字符,我假设你不需要这种行为。

2。 lastBitNode,您需要获取该节点中可由lastBit.data检索的数据的文本值。获取字符串值后,您可以使用像''转换为数组的分隔符字符进一步分割。

以下代码应该有效。

var bits = $('.orig').contents(); 
var lastBit = bits[bits.length - 1]; 
var array = lastBit.data.split(' ');
console.log(array);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<p class="orig"><strong>Some bold text</strong> and some other text</p>

答案 1 :(得分:0)

lastBit变量不是简单的字符串,而是Text对象。例如,使用import React, {Component} from 'react'; import {connect} from 'react-redux; import Promise from 'promise'; class MyStatefulComponent extends Component { constructor(props) { this.state = { messages: [] // initialize empty, or with the synchronous rules }; } componentWillMount() { const setState = this.setState; const rules = this.props.rules; // rules contains a list of either evaluated rules or promises Promise.all(rules).then(results => { // this is executed once all the promises in rules have resolved // setState will trigger a re-render of this component setState({ messages: [] // construct your array of messages here from the results }); }) } render() { // render your list of messages return <ul> {this.state.messages.map(message => <li>{message}</li>)} </ul>; } } export default connect( (state, ownProps) => ({ rules: ownProps.rules.map(rule => rule(state)) }) )(MyStatefulComponent); lastBit.wholeText来获取实际的文本字符串。