我有一个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。
我的逻辑错了吗?它似乎没有用。
答案 0 :(得分:3)
这是您的问题:在Javascript中,字符串是不可变的,这意味着它们无法更改。除非您为变量temporaryString
分配不同的内容,否则该变量不会发生变化。
运行此代码时:
temporaryString = "<span>Span Content</span><div>DIV Content</div>";
$(temporaryString).find("div").remove();
这就是:
"<span>Span Content</span><div>DIV Content</div>"
已分配到temporaryString
$(temporaryString)
运行,解析temporaryString
并创建html元素的相应类数组对象(jQuery对象)并返回它。 temporaryString
保持不变。.find("div")
运行,在上一步的结果中找到所有div元素并返回它们。 temporaryString
保持不变。.remove()
运行,从jQuery对象中删除上一步返回的元素。 temporaryString
保持不变。$(temporaryString).find("div").remove()
创建的对象和元素超出范围,并被垃圾回收器删除。 temporaryString
仍未更改。 简而言之,如果你对$(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引用,然后您可以删除其中的元素。