ورود

View Full Version : سوال: جستجو و استخراج از یک رشته HTML و اعمال در مکان های مشخص توسط Javascript



Chabok
جمعه 12 شهریور 1389, 20:55 عصر
با سلام

در فراخوانی یک صفحه بصورت Ajax خروجی زیر را دارم .

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" type="image/ico" href="favicon.ico" />
<title>درباره ما</title>

</head>
<body>

<form name="aspnetForm" method="post" action="Contents.aspx" id="aspnetForm">

<span class="PostHeader">درباره ما</span>
<img src="shades_smile.gif" alt="" />

</form>

</body>
</html>


عملیاتی که میخواهم روی این رشته انجام بدم به این صورته:

مقادیر بین تگ head رو به تگ head صفحه اضافه کنم .
مقادیر (attribute) های تگ form صفحه را با مقادیر تگ form در این رشته جایگزین کنم .

مقادیر بین تگ form را نیز درون یک عنصر مشخص شده بریزم .

راه حل هایی که بهش فکر کردم یکی خواندن مقادیر مورد نیاز بین تگ ها توسط Regex ها سمت کلاینت توسط javascript بود .

که ظاهراً regex ها در javascript کاملاً با Lookaround ها سازگار نیست .

و راه حل دیگر تبدیل این رشته به یک DOM و پیمایش آن و یافتن تگ ها و ...

این کار را توسط jquery و به این صورت انجام دادم :

http://barnamenevis.org/forum/attachment.php?attachmentid=55345&stc=1&d=1283532492 (http://api.jquery.com/jQuery/)

ولی ظاهراً فقط کدهای درون تگ body را می توان پیمایش کرد . دقیقاً نمیدونم چه مشکلی داره

مثلاً توسط دستور زیر می توان به یک عنصر با آیدی خاص در این رشته دسترسی داشت .

$(msg).find("#myElement").html()ولی تگ فرم خوانده نمی شود :

$(msg).find("form").html()و یا تگ head نیز به همین صورت .

به نظر شما چکار کنم ؟
ممنونم .


-------------
یک نمونه پروژه ساده ضمیه شد

aminghaderi
شنبه 13 شهریور 1389, 16:51 عصر
به نظر شما چکار کنم ؟من مشابه این کار رو کردم استاد چابک.
به این صورت که یه تابع براش تعریف کردم که رشته رو که از اجکس می گرفت ، داخل رشته توسط index خود رشته پیمایش می شد و به هر تگ (مثلا تگ Header) که می رسید index آخر کاراکتر رو بر می داشت و همچنین تگ (Header/) که می رسید index اولین کاراکتر رو بر می داشت و بعد از index اول تا index دوم رو کاراکتر ها رو جمع می کرد و داخل یه متغیر رشته ای مثلا s قرار می داد.
فکر کنم ، خلاصه مفید مختصر جواب دادم؟!
اگر نیاز به تضیح داشت ، توضیح بدم.
دستور پیمایش اندیکس:

myVarable.charAt.(i)پیدا کردن ایندکس یه کلمه :

myVarable.indexOf("<Header>")یه تابع دیگه فکر کنم slic هم هست که رشته مورد نظر رو از اندکس مبدا تا مقصد Cut می کنه ، ولی شما از اون استفاده نکن ، چون توی مرورگر های دیگه مثل ie عزیز (اگه اشتباه نکنم) به مشکل می خورید.
(براش شبیه سازی کنید ، راحت تر و مطمئن تره.)

موفق باشید.

Chabok
یک شنبه 14 شهریور 1389, 12:01 عصر
با سلام

ممنون از اینکه وقت گذاشتید و پاسخ دادین .
از راهنمایی شما استفاده کردم .

ولی در واقع برای پیدا کردن تگ ها توسط RegEx ها سمت کلاینت برای مثال تگ form را خواندم و پس از استخراج مقادیر آن ها ان را از رشته اصلی حذف کردم .

به همین ترتیب کلیه مقادیر لازم خوانده شد و از رشته اصلی حذف شد و در صفحه اعمال شد و در نهایت چیزی که مانده بود در جای خود قرار دادم .

من در اول میخواستم از یک راه صاف و پوست کنده جلو برم . واسه همین این تاپیک رو زدم به امید اینکه راه ساده ای واسه انجام این کار باشه .

باز هم از شما تشکر میکنم .
ممنون . موفق باشید .

eAmin
یک شنبه 14 شهریور 1389, 18:33 عصر
سلام

درسته، JavaScript بطور کامل از Lookaround بشتیبانی نمی کنه، ولی برای انجام عملیاتی که شما می خواستید انجام بدید همون امکانات JavaScript هم جواب گوی کار شما بود، و اینطور که معلومه اینطور هم بوده و تونستید کارتون رو انجام بدید.

درکل درسته JavaScript یه امکاناتی رو بصورت ذاتی برای شما فراهم نکرده، ولی یک فرد می تونه با ابتکار و خلاقیت این امکانات رو بصورت بسیار ابتدایی پیاده سازی کنه!
مثلا این یک نمونه از Lookbehind که در جاوااسکریپت پیاده سازی شده:
http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

موفق باشید.