您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Zeigt den Preis pro m² (fett, groß, ohne Klammern) direkt in den Kleinanzeigen Suchergebnissen für Immobilien an. Jetzt auch für Tauschangebote.
当前为
// ==UserScript== // @name Kleinanzeigen m² Preis Rechner V2.1 // @namespace http://tampermonkey.net/ // @version 1.3.1 // @description Zeigt den Preis pro m² (fett, groß, ohne Klammern) direkt in den Kleinanzeigen Suchergebnissen für Immobilien an. Jetzt auch für Tauschangebote. // @license MIT // @author Dein Name // @match https://www.kleinanzeigen.de/s-wohnung-mieten/* // @match https://www.kleinanzeigen.de/s-haus-mieten/* // @match https://www.kleinanzeigen.de/s-wohnung-kaufen/* // @match https://www.kleinanzeigen.de/s-haus-kaufen/* // @match https://www.kleinanzeigen.de/s-wg-zimmer/* // @match https://www.kleinanzeigen.de/s-immobilien/* // @match https://www.kleinanzeigen.de/s-grundstuecke-gaerten/* // @grant GM_addStyle // @run-at document-idle // ==/UserScript== (function() { 'use strict'; // CSS für die Anzeige des m²-Preises GM_addStyle(` .sqm-price-display { font-size: 1.4em; /* Angepasst: Größer, etwa wie der Hauptpreis */ color: #20242C; /* Angepasst: Farbe des Hauptpreises für Konsistenz */ font-weight: bold;/* Angepasst: Fett */ margin-left: 10px;/* Etwas Abstand zum Hauptpreis */ } /* Stellt sicher, dass der Preis-Container den zusätzlichen Text aufnehmen kann */ .aditem-main--middle--price-shipping { display: flex; align-items: baseline; /* Basislinien der Texte auf gleicher Höhe */ flex-wrap: wrap; } .aditem-main--middle--price-shipping--price { /* Standardstyles für den Hauptpreis bleiben erhalten */ } .sqm-price-container { /* Container für den m² Preis, um ihn rechts zu platzieren */ margin-left: auto; /* Schiebt diesen Container ganz nach rechts */ padding-left: 5px; } `); function parsePrice(priceString) { if (!priceString) return null; const cleanedPrice = priceString .replace(/\s*VB\s*/i, '') .replace(/\s*€\s*/g, '') .replace(/\./g, '') .replace(/,/g, '.') .trim(); if (cleanedPrice.toLowerCase() === 'zu verschenken') return 0; if (cleanedPrice.toLowerCase() === 'auf anfrage' || cleanedPrice.toLowerCase() === 'anfrage') return null; const price = parseFloat(cleanedPrice); return isNaN(price) ? null : price; } function parseArea(areaString) { if (!areaString) return null; const match = areaString.match(/([\d\.,]+)\s*m²/i); if (match && match[1]) { const cleanedArea = match[1].replace(/\./g, '').replace(/,/g, '.'); const area = parseFloat(cleanedArea); return isNaN(area) || area === 0 ? null : area; } return null; } function processAdItems() { const items = document.querySelectorAll('article.aditem'); items.forEach(item => { const priceShippingContainer = item.querySelector('.aditem-main--middle--price-shipping'); if (!priceShippingContainer) return; if (priceShippingContainer.querySelector('.sqm-price-container')) { return; } const priceElement = priceShippingContainer.querySelector('.aditem-main--middle--price-shipping--price'); const priceText = priceElement ? priceElement.textContent : null; // *** GEÄNDERTER SELEKTOR HIER *** // Sucht nach einem p-Element innerhalb von .aditem-main--bottom const tagsContainer = item.querySelector('.aditem-main--bottom p'); let areaText = null; if (tagsContainer) { const simpleTags = tagsContainer.querySelectorAll('span.simpletag'); simpleTags.forEach(tag => { if (tag.textContent && tag.textContent.includes('m²')) { areaText = tag.textContent; } }); } const price = parsePrice(priceText); const area = parseArea(areaText); if (price !== null && area !== null && area > 0) { const pricePerSqm = price / area; const sqmPriceOuterContainer = document.createElement('div'); sqmPriceOuterContainer.classList.add('sqm-price-container'); const sqmPriceElement = document.createElement('span'); sqmPriceElement.classList.add('sqm-price-display'); sqmPriceElement.textContent = `${pricePerSqm.toFixed(2).replace('.', ',')} €/m²`; sqmPriceOuterContainer.appendChild(sqmPriceElement); priceShippingContainer.appendChild(sqmPriceOuterContainer); } }); } // Führe die Funktion initial aus processAdItems(); // MutationObserver für dynamisch geladene Inhalte const observerTargetNode = document.getElementById('srchrslt-adtable') || document.body; const observer = new MutationObserver(function(mutationsList) { for (const mutation of mutationsList) { if (mutation.type === 'childList' && mutation.addedNodes.length > 0) { let hasNewAdItems = false; for (const addedNode of mutation.addedNodes) { if (addedNode.nodeType === Node.ELEMENT_NODE && (addedNode.classList.contains('aditem') || addedNode.querySelector('.aditem'))) { hasNewAdItems = true; break; } } if (hasNewAdItems) { setTimeout(processAdItems, 300); return; } } } }); observer.observe(observerTargetNode, { childList: true, subtree: true }); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址