# HTMLの編集

ページ編集機能では、HTMLコードの直接編集が可能です。

編集したコードはPtengineを通じて本番環境に反映することができます。

HTMLの知識をお持ちの方にとっては非常に便利な機能ですが、適切な知識や経験がない場合、予期せぬ不具合を引き起こす可能性がありますのでご注意ください。

![](/files/7JFihxmX16v5gI4NoMtb)

### **インタラクティブコンテンツの不具合**

#### **インタラクティブコンテンツとは**

ユーザーのクリックやマウスオーバーなどの操作に反応して動作するコンテンツや機能を指します。

具体的には以下のような要素が該当します：

* ナビゲーションメニュー
* アコーディオンパネル
* カート追加ボタン
* 購入ボタン
* 入力フォーム
* 各種リンク

### **状況説明**

HTMLの編集には以下のようなリスクが伴いますので、十分ご注意ください。

1. **JavaScriptイベントへの影響**

   特定の要素を編集することにより、以下のような動的機能が正常に動作しなくなる可能性があります。

   * スライダーの動作
   * ポップアップの表示/非表示
   * その他インタラクティブな機能
2. **モジュール構造への影響**

   HTMLの構造を変更することで、以下のような問題が発生する可能性があります。

   * タブの切り替え機能の停止
   * ナビゲーションメニューの崩れ
   * レイアウトの乱れ
   * モジュール間の連携機能の異常

これらの問題を防ぐため、以下の点に注意して編集を行ってください：

* 編集前に対象要素の機能や役割を十分確認する
* 必要最小限の変更にとどめる
* 編集後は必ず動作確認を行う(プレビュー機能)

### HTMLを安全に編集するためのベストプラクティス

**1. インタラクティブ要素の編集は最小限に**

* JavaScriptと連動する要素を変更する場合は特に注意が必要です
* 変更後はJavaScriptイベントの再適用が必要となります
* 同様の機能を実現したい場合は、「コードモード」を使用して新しい記述を追加することを推奨します

**2. 編集は個別要素レベルで実施**

* 複数のコンテンツを変更する必要がある場合でも、上位の階層（親要素）は極力編集しないようにします
* 変更が必要な要素それぞれを個別に編集することで、以下のメリットがあります：
  * ページ全体の構造を維持できる
  * 予期せぬ影響を最小限に抑えられる
  * 問題が発生した場合の特定と修正が容易になる

**3. HTML編集における推奨アプローチ**

例えば、下記の画像内赤枠の3つのコンテンツを変更する場合を例に挙げてご説明します。

✅ **推奨：個別要素の編集**

要素1、2、3をそれぞれ個別に変更する（3回の操作）

* 安全性が高い
* 影響範囲が限定的
* 問題が発生した場合の特定が容易
* 変更の取り消しが簡単

![](/files/VxoOciVSCrr5kM12gIzT)

**❌ 非推奨：一括編集**

上位レイヤーを選択して一括で編集する（1回の操作）

![](/files/LYWbH3YiYE95Z7iYj1Dx)

{% hint style="danger" %}
**一括編集のリスク**

* **構造の崩れ**
  * ページレイアウトが損なわれやすい
  * 予期せぬ副作用が発生しやすい
* **インタラクティブ要素への影響**
  * JavaScriptイベントの誤作動
  * 動的機能の停止
    {% endhint %}

**注意点**

* 一括編集は作業時間を短縮できますが、以下のデメリットがあります：
  * ページ構造を破壊するリスクが高い
  * 修正に多大な時間がかかる可能性
  * テストと確認作業が複雑化

## **コピーと貼り付け**

ページ内の要素を自由にコピーして、別の場所に貼り付けることができます。

この機能は非常に便利ですが、正しく使用しないと予期せぬ問題が発生する可能性があります。以下に主な注意点をご説明します。

### **IDの重複について**

要素をコピーする際、その要素にIDが設定されている場合、同じページ上に同一のIDを持つ要素が複数存在することになります。W3C標準では、IDは1ページ内で一意である必要があるため、重複すると不具合の原因となる可能性があります。

#### **想定される問題**

* IDに紐づいたイベント処理が正しく動作しない
* コピーした要素に対して、期待した動作やインタラクションが実行されない

#### **推奨する使用方法**

1. 要素を貼り付けた後、HTMLを確認する
2. ID属性が含まれているかチェックする
3. IDが存在する場合は、重複しない新しい値に変更する

```jsx
function findDuplicateIds() {
    // ページ上のすべての要素を取得します
    const allElements = document.querySelectorAll('*');
    const idMap = {};
    // すべての要素を反復処理し、重複するIDがあるかどうかを確認します
    allElements.forEach((element) => {
        const id = element.id;
        if (id) {
            if (idMap[id]) {
                // 重複するIDが存在する場合、そのIDを出力します
                console.log(`ページに重複するIDの要素が存在します：${id}`);
            } else {
                // 重複するIDが存在しない場合、IDをIDマップに追加します
                idMap[id] = true;
            }
        }
    });
}
// 重複するIDを検索するメソッドを呼び出します
findDuplicateIds();
```

上記のコードを使用してページ内でIDが重複している要素がないかを、以下の手順で確認することができます。

1. 対象のウェブサイトで、ディベロッパーツール（開発者ツール）を開く
   * Windows/Linuxの場合：F12キー または Ctrl + Shift + I
   * Macの場合：Command + Option + I
2. 「Console」（コンソール）タブを選択
3. 上記のコードをコンソールにコピー＆ペースト
4. Enterキーを押して実行

{% hint style="warning" %}
**IDの重複がある場合**： 「ページに重複するIDの要素が存在します：\[重複しているID]」というメッセージが表示されます。

**IDの重複がない場合**： 特にメッセージは表示されません。
{% endhint %}

### **スタイルの引き継ぎ**

要素をコピー＆ペーストする際、見た目や配置が元の要素と異なることがあります。

たとえば、商品情報をページ内で移動させると：

* 商品画像のサイズが変わる
* 価格表示の位置がずれる
* 説明文の書式が崩れる

このような問題を防ぐには、スタイル設定を確実に引き継ぐ必要があります。

#### **スタイルを保つためのポイント**

要素を移動する際のスタイル維持には、次の2つの方法が有効です：

1. CSSの見直し
   * スタイルの適用状況を確認
   * セレクタの調整
   * 要素間の関係を確認
2. スタイルの直接設定
   * HTML内で直接スタイルを指定
   * シンプルな構造を心がける
   * 移動の影響を最小限に

これらの方法で、一貫したデザインを保つことができます。

### **インタラクティブ機能の同期不良**

要素をコピーして新しい場所に配置すると、元の要素が持っていた操作機能が正しく動作しないことがあります。たとえば、「カートに追加」ボタンをコピーした場合、新しい場所に配置したボタンをクリックしても反応がない状態になってしまいます。

#### **状況説明**

元の要素に設定されていた操作機能（例：カートへの追加、商品の注文、お気に入り登録など）は、コピーして新しい場所に配置しただけでは、そのまま機能しないのが一般的です。これは、要素の見た目だけがコピーされ、その裏で動いている処理の設定が引き継がれないためです。

#### **おすすめの対応方法**

**インタラクティブ要素の扱いを避ける**

操作機能を持つ要素（ボタンやフォームなど）は、できるだけコピーを避けることをお勧めします。

**やむを得ずコピーが必要な場合**

JavaScriptを使用して新しく貼り付けた要素にインタラクションイベントが実行できるよう記述を追加してください。

記述を追加する場合、次のようなコードモードを使用して実行させることができます。

![](/files/R7OonPMp0RB21DhmZ6M1)

JavaScriptのインタラクションイベントを要素に追加する方法を、以下のように簡単に説明します。

1. ブラウザの開発者ツールを開く
2. 要素パネルで対象の要素を選択
3. イベントリスナーセクションを確認：
   * 必要なイベントタイプを探す
   * 関連するJavaScriptロジックを確認

この手順で、要素に適切なインタラクションイベントを追加できます。

![](/files/wMXIEYR28A8ieRI2oRsv)

***

## **スタイルの変更**

要素のスタイルはページ編集機能内で調整できます。例えば、色、レイアウト、フォントなどが変更できます。

### **スタイルが適用されないの場合**

#### 主な理由

* CSSの優先度（詳細度）の問題
* 既存のスタイルとの競合
* セレクタの指定ミス

#### 推奨される解決方法

スタイルの調整が反映されない場合、CSSコードモードでスタイルを直接変更し、!importantを使用して優先度を上げることができます。

例：

```css
.target-element {
    color: blue !important;
    font-size: 16px !important;
}
```

## **最後に**

Ptengineのインライン編集機能を効果的かつ安全に活用するには、各機能の仕組みと潜在的な問題点を理解することが重要です。これにより、一般的な問題を回避し、ウェブサイトの正常な動作と優れたユーザー体験を維持できます。

重要な注意点：

1. 操作前には必ずバックアップを取る
2. 変更後は十分なテストを行う

これらの原則を守ることで、Ptengineを最大限に活用できます。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://helps.ptengine.com/experience/campaign/create-new/notes-html.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
