Javascript jquery重复节点匹配和删除

Javascript jquery重复节点匹配和删除,javascript,jquery,Javascript,Jquery,我有2个节点集,包含以下内容 obj1 "<p>the quick <b>brown</b> fox jumped over the fence</p>" obj2 "<p>the quick <b>brown</b> fox </p>" obj1”那只敏捷的棕色狐狸跳过了栅栏 obj2“敏捷的棕色狐狸” 我正在尝试将obj1的内容与obj2匹配,然后删除匹配的节点,以留下一个看起来像的对象 ou

我有2个节点集,包含以下内容

obj1 "<p>the quick <b>brown</b> fox jumped over the fence</p>"
obj2 "<p>the quick <b>brown</b> fox </p>"
obj1”那只敏捷的棕色狐狸跳过了栅栏
obj2“敏捷的棕色狐狸”
我正在尝试将obj1的内容与obj2匹配,然后删除匹配的节点,以留下一个看起来像的对象

output "<p>jumped over the fence</p>"
输出“跳过了栅栏”

使用jquery$.match返回错误,$.find也不会产生任何结果,是否有其他有效的方法来完成我正在尝试解决的问题?

您可以尝试使用$.html()匹配字符串表示形式


只是一个快速的尝试。也许这有帮助。它将在HTML中保留粗体标记,并且可能不会涵盖直接问题之外的任何内容

var obj1 = "<p>the quick <b>brown</b> fox jumped over the fence</p>";
var obj2 = "<p>the quick <b>brown</b> fox </p>";

var result="";
var inTag=false;

for (i=0;i<obj1.length;i++)
{
    if(obj1[i]=='<')
        isTag=true;
    if(!isTag)
    {
        if(i<obj2.length-1)
        {
            if(obj1[i]!=obj2[i])
            {
                result+=obj1[i];
            }
        }
        else
        {
            result+=obj1[i];
        }
    }
    else
    {
        result+=obj1[i];
    }
    if(obj1[i]=='>')
        isTag=false;
}

$("#result").html(obj1+obj2 + "<p>Difference:</p>"+result);​
var obj1=“那只敏捷的棕色狐狸跳过了栅栏”

”; var obj2=“敏捷的棕色狐狸”

”; var结果=”; var inTag=假;
对于(i=0;i你可以这样做

var obj1Txt= $(obj1).text();
var obj2txt= $(obj2).text();
var output= '<p>'+obj1txt.replace(obj2txt,'')+'</p>';
var obj1Txt=$(obj1.text();
var obj2txt=$(obj2).text();
变量输出=“”+obj1txt.replace(obj2txt)”)+“

”;
不确定这是否符合要求,但变量在我看来像是HTML字符串,看起来您希望在不丢失原始主元素的情况下逐字比较字符串,我会执行以下操作:

var obj1 = "<p>the quick <b>brown</b> fox jumped over the fence</p>",
    obj2 = "<p>the quick <b>brown</b> fox </p>";

var obj3 = compare(obj1, obj2);

$('body').append(obj3);


function compare(elm1, elm2) {
    var obj = [],
        o1 = String($(elm1).html()).split(' '), //get <p>'s inner HTML as string and split on spaces to get each word
        o2 = String($(elm2).html()).split(' ');

    $.each(o1, function(i,e) { //iterate over each word inside <p> of first string
        if (e !== o2[i]) obj.push(e); //check if matches each word in the same loaction in the second string
    });
    //we should now have an array of the words that does not match each other
    return $(elm1).clone().html(obj.join(' ')); //join with new spaces and return the string as html contained in a clone of the original element.
}
var obj1=“那只敏捷的棕色狐狸跳过了栅栏,

”, obj2=“敏捷的棕色狐狸”

”; var obj3=比较(obj1,obj2); $('body').append(obj3); 函数比较(elm1、elm2){ var obj=[], o1=String($(elm1.html()).split(“”),//获取的内部html作为字符串,并在空格上拆分以获取每个单词 o2=字符串($(elm2.html()).split(“”); $.each(o1,函数(i,e){//迭代第一个字符串内的每个单词 if(e!==o2[i])obj.push(e);//检查是否与第二个字符串中同一动作中的每个单词匹配 }); //我们现在应该有一个相互不匹配的单词数组 return$(elm1.clone().html(obj.join(“”));//使用新空格连接,并将字符串作为原始元素克隆中包含的html返回。 }

作为一个函数调用(似乎更简单)

应该补充一点,这对以下情况不起作用:

var obj1 = "<p>the quick <b>brown</b> fox jumped over the fence</p>",
    obj2 = "<p>fox jumped over the fence</p>";
var obj1=“那只敏捷的棕色狐狸跳过了栅栏,

”, obj2=“狐狸跳过了栅栏”

”;
虽然第二个字符串是第一个字符串的一部分,但由于这些字符串不能逐字匹配,因此,在这种情况下,要删除字符串的类似部分,您始终可以执行以下操作:

var obj1 = "<p>the quick <b>brown</b> fox jumped over the fence</p>",
    obj2 = "<p>fox jumped over the</p>",
    o1 = String($(obj1).html()),
    o2 = String($(obj2).html());

var obj = $(obj1).clone().html(o1.replace(o2, ''));
var obj1=“那只敏捷的棕色狐狸跳过了栅栏,

”, obj2=“狐狸跳过了

”, o1=字符串($(obj1.html()), o2=字符串($(obj2.html()); var obj=$(obj1.clone().html(o1.replace(o2');

当obj1=“敏捷的棕色狐狸跳过栅栏”和obj2=“敏捷的绿色狐狸”时,你想看到什么我想将obj1与obj2进行比较……并删除重复项,以形成我要求的输出。如果您试图比较标记内的html,或任何一般html。因为请注意标记如何匹配,但没有删除,但标记匹配并删除。obj2.html输出的
quick brown fox

->第一个不匹配,因此整个替换不起作用。我以为obj1和obj2是jQuery对象。无论如何,
$(obj1.clone().html($(obj1.html().replace($(obj2.html(),'')
应该可以工作
var obj1 = "<p>the quick <b>brown</b> fox jumped over the fence</p>",
    obj2 = "<p>fox jumped over the</p>",
    o1 = String($(obj1).html()),
    o2 = String($(obj2).html());

var obj = $(obj1).clone().html(o1.replace(o2, ''));