Как я заменяю весь узел HTML с помощью jQuery

Пока общепринятая практика должна реализовать ICloneable интерфейс (описал здесь , таким образом, я не извергну), вот хорошее глубокое копировальное устройство объекта клона, которое я нашел на Проект Кода только что и включил его в наш материал.

, Как упомянуто в другом месте, это действительно требует Вашим объектам быть сериализуемым.

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

/// 
/// Reference Article http://www.codeproject.com/KB/tips/SerializedObjectCloner.aspx
/// Provides a method for performing a deep copy of an object.
/// Binary Serialization is used to perform the copy.
/// 
public static class ObjectCopier
{
    /// 
    /// Perform a deep Copy of the object.
    /// 
    /// The type of object being copied.
    /// The object instance to copy.
    /// The copied object.
    public static T Clone(T source)
    {
        if (!typeof(T).IsSerializable)
        {
            throw new ArgumentException("The type must be serializable.", nameof(source));
        }

        // Don't serialize a null object, simply return the default for that object
        if (Object.ReferenceEquals(source, null))
        {
            return default(T);
        }

        IFormatter formatter = new BinaryFormatter();
        Stream stream = new MemoryStream();
        using (stream)
        {
            formatter.Serialize(stream, source);
            stream.Seek(0, SeekOrigin.Begin);
            return (T)formatter.Deserialize(stream);
        }
    }
}

идея состоит в том, что это сериализирует Ваш объект и затем десериализовывает его в новый объект. Преимущество - то, что Вы не должны интересоваться о клонировании всего, когда объект становится слишком сложным.

И с использованием дополнительных методов (также из источника, на который первоначально ссылаются):

В случае, если Вы предпочитаете использовать новое дополнительные методы из C# 3.0, измените метод для имения следующей подписи:

public static T Clone(this T source)
{
   //...
}

Теперь вызов метода просто становится objectBeingCloned.Clone();.

РЕДАКТИРОВАНИЕ (10 января 2015) Мысль я пересмотрел бы это, чтобы упомянуть, что я недавно начал использовать (Newtonsoft) Json, чтобы сделать это, это должно быть легче и избегает издержек [сериализуемых] тегов. ( NB @atconway указал в комментариях, что члены парламента, не занимающие официального поста не клонированы с помощью метода JSON)

/// 
/// Perform a deep Copy of the object, using Json as a serialisation method. NOTE: Private members are not cloned using this method.
/// 
/// The type of object being copied.
/// The object instance to copy.
/// The copied object.
public static T CloneJson(this T source)
{            
    // Don't serialize a null object, simply return the default for that object
    if (Object.ReferenceEquals(source, null))
    {
        return default(T);
    }

    // initialize inner objects individually
    // for example in default constructor some list property initialized with some values,
    // but in 'source' these items are cleaned -
    // without ObjectCreationHandling.Replace default constructor values will be added to result
    var deserializeSettings = new JsonSerializerSettings {ObjectCreationHandling = ObjectCreationHandling.Replace};

    return JsonConvert.DeserializeObject(JsonConvert.SerializeObject(source), deserializeSettings);
}

61
задан Ken Browning 1 November 2011 в 06:53
поделиться

2 ответа

Методы document.open/write/close будут делать то, что вы хотите:

var newDoc = document.open("text/html", "replace");
newDoc.write(myString);
newDoc.close();

Если вы не передадите параметр replace, вызов document.open добавляет историю страниц. Поэтому пользователям придется дважды щелкнуть назад, чтобы перейти на предыдущую страницу.

127
ответ дан 24 November 2019 в 17:06
поделиться

Вы можете просто вырезать теги html, а затем поместить все внутри элемента html:

$('html').html(myString.replace(/<html>(.*)<\/html>/, "$1"));
16
ответ дан 24 November 2019 в 17:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: