jQuery对象无法解析为HTML

时间:2011-06-17 16:23:52

标签: jquery sharepoint

我有一个ajax调用,在for循环中逐个返回各种数据库字段。我可以使用以下方法测试字段是否为HTML:

for(i = 0; i < copyFromSchedule.length; i++) {
    temporaryString = $(this).attr("ows_"+copyFromSchedule[i]);
    if ($(temporaryString).html() == null)
        // Is not HTML...
    else
        // Is HTML, remove any anchors found in this string (<a name="XXX"></a>)
        $(temporaryString).find("a[name]").remove();
}

在else语句中(当字符串是HTML时),我正试图(不成功)使用上面的函数删除所有HTML锚点。

如何通过jQuery将对象操作为HTML?

更新

在进一步检查时,我意识到问题与我最初的想法有所不同。

我的问题是我无法将变量(temporaryString)作为jQuery对象进行操作。例如,以下内容不会影响对象的html:

$(temporaryString).find("div").remove();

所以,理论上如果我有以下内容:

temporaryString = "<span>Span Content</span><div>DIV Content</div>";
$(temporaryString).find("div").remove();

我认为'temporaryString'现在应该相等:

<span>Span Content</span>

因为删除了div。

我的逻辑错了吗?它似乎没有用。

5 个答案:

答案 0 :(得分:3)

这是您的问题:在Javascript中,字符串是不可变的,这意味着它们无法更改。除非您为变量temporaryString分配不同的内容,否则该变量不会发生变化。

运行此代码时:

temporaryString = "<span>Span Content</span><div>DIV Content</div>";
$(temporaryString).find("div").remove();

这就是:

  1. "<span>Span Content</span><div>DIV Content</div>"已分配到temporaryString
  2. $(temporaryString)运行,解析temporaryString并创建html元素的相应类数组对象(jQuery对象)并返回它。 temporaryString保持不变。
  3. .find("div")运行,在上一步的结果中找到所有div元素并返回它们。 temporaryString保持不变。
  4. .remove()运行,从jQuery对象中删除上一步返回的元素。 temporaryString保持不变。
  5. $(temporaryString).find("div").remove()创建的对象和元素超出范围,并被垃圾回收器删除。 temporaryString 仍未更改。
  6. 简而言之,如果你对$(temporaryString).find("div").remove()的结果没有做任何事情,那么没有任何反应。

    如果您希望temporaryString成为"<span>Span Content</span>",则需要将您对jQuery对象执行的所有操作的结果分配回temporaryString变量。执行此操作的最佳方法是创建div元素,将其内容设置为temporaryString,删除所需元素,并将div元素的新内容分配回{{1}像这样:

    temporaryString

    对于您的原始问题,您可以尝试:

    temporaryString = $("<div>").html(temporaryString).find("div").remove().end().html();
    

    很抱歉这个冗长的回答。

答案 1 :(得分:0)

如果我理解正确:

if ($(temporaryString).html() == null) {
    // Is not HTML...
}
else {
    $('a', temporaryString).remove(); //remove all anchor tags
}

答案 2 :(得分:0)

我发现在使用JQuery测试之前,最简单的方法是将一个字符串“HTML”添加到包装元素中:

$('<div>').html(temporaryString).find('a[name]').remove();

答案 3 :(得分:0)

我认为你应该这样做all you want is just anchors

  

$(temporaryString).find( “a”)的除去();

但问题是,temporarystring中有什么? 如果它只是文本,那么我认为最简单的方法是使用隐藏的div并在那里粘贴html并使用jquery调用div进行处理。

$("#hiddenDivId").html(myHtmlChunk);
$("#hiddenDivId").find("a").remove();

//then do whatever u want with the html and clear the hidden div
$("#hiddenDivId").html("");

答案 4 :(得分:0)

使用一些标记(理想情况下temporaryString使用ad hoc id)汇总您的div,然后将其作为jQuery DOM引用,然后您可以删除其中的元素。