0

我正在尝试从我的旧站点中提取旧的常见问题解答系统并将其重新编码为<dl>.

到目前为止,这是我的 jQuery 代码:

$accordion = $('.accordion');
$headers = $accordion.find('h3.trigger-h3-accordion a');
$content = $accordion.find('div.toggle-accordion-large');

out = "<dl>\n";
$headers.each(function(k,v) {
    out += "<dt>" + $(this).text() + "</dt>\n";
    out += "<dd>" + $content[k].html() + "</dd>\n";
    // I also tried $content.k.html() and $content{k}.html()
    // and .text() on all of those options
});
out += "</dl>\n";
console.log(out);

我得到错误:TypeError: $content[k].html is not a function

在线的:out += "<dd>" + $content[k].html() + "</dd>\n";

<div class="accordion">
    <div class="trigger-accordion-large trigger-accordion-active">
        <h3 class="trigger-h3-accordion"><a href="#" onclick="return stopAccordionRefresh();">Header Text</a></h3>
    </div>
    <div style="display: block;" class="toggle-accordion-large">
        <div class="block-large">
            <div class="body-content-textarea">
                <p>Content Text.</p>
            </div>
        </div>
    </div>
</div>

如何输出循环中每个 $content 对象的内容以创建<dl><dt><dd>我所追求的有效内容?

4

4 回答 4

2

使用数组索引访问 jQuery 对象的元素会返回底层 DOM 元素,而不是 jQuery 对象;要访问元素的 jQuery 引用,请改用以下.eq()方法:

out += "<dd>" + $content.eq(k).html() + "</dd>\n";
于 2012-09-10T10:32:26.367 回答
2

我将通过制作 jQuery 对象而不是 HTML-String 来处理转换:

var $accordion = $('.accordion'),
    $headers = $('h3.trigger-h3-accordion a', $accordion),
    $content = $('div.toggle-accordion-large', $accordion),
    $out = $('<dl/>')
    $dt = $('<dt/>'),
    $dd = $('<dd/>');

$headers.each(function(k,v) {
    var contents = $($content[k]).html();
    $dt.clone().html(v.innerHTML).appendTo($out);
    $dd.clone().html(contents).appendTo($out);
});

console.log(out);
于 2012-09-10T10:47:38.157 回答
1

试试这个:

$($content[k]).html();

因为,.html()仅适用于 jQuery 对象,根据您的错误,它似乎$content[k]不是 jQuery 对象,可能是一个元素。

因此,将其包装在其中$()将使其成为 jQuery 对象,然后您就可以对其使用任何 jQuery 方法。

如果$content[k]是一个元素,那么您可以使用:

$content[k].innerHTML = 'your_all_html';
于 2012-09-10T10:22:05.467 回答
1

这是因为$content[k]是原生元素,而不是 jQuery 对象。您可以将它包装在一个新的 jQuery 对象中,正如 codeparadox 所建议的那样,或者使用$content[k].html( String, not Function)。

[] 的文档在这里:http ://api.jquery.com/get/

.get()返回 jQuery 对象中所有 dom 元素的原生数组。
.get(n)返回第 n 个元素,从零开始。
.get(-n)返回第 n 个最后一个元素,从 1 开始。
jQuery 对象在某种意义上就像一个数组,其中
[n]包含第 n 个元素
.length包含元素的数量

可以在此处找到本机 dom 元素的文档:

http://www.w3schools.com/jsref/dom_obj_all.asp http://www.javascriptkit.com/domref/elementproperties.shtml

于 2012-09-10T10:25:01.390 回答